2009-09-04 14 views
8

¿Cómo creo un script de inicio de sesión sencillo que no requiere una base de datos? Me gustaría que sea seguro.Script de inicio de sesión sencillo sin base de datos

Muy bien, ¿qué pasa con este script, acabo de hacerlo por mi conocimiento en php.

<?php 
// Start session 
session_start(); 

// Username and password 
$ID = "admin"; 
$pass = "123456"; 

if (isset($_POST["ID"]) && isset($_POST["pass"])) { 

    if ($_POST["ID"] === $anvandarID && $_POST["pass"] === $pass) { 
    /
    $_SESSION["inloggedin"] = true; 

    header("Location: safe_site.php"); 
    exit; 
    } 
     // Wrong login - message 
     else {$wrong = "Bad ID and password, the system could not log you in";} 
} 
?> 

El safe_site.php contiene esto y algo de contenido:

session_start(); 

if (!isset($_SESSION["inloggning"]) || $_SESSION["inloggning"] !== true) { 
header("Location: login.php"); 
exit; 
} 
+1

¿Cómo crearía un script de inicio de sesión sencillo que no requiere una base de datos en ASP? – Gumbo

+1

@Gumbo: con OpenID :) – Sampson

+0

Ahora, ¿qué pasa con mi ejemplo que agregué en la primera publicación anterior aquí? –

Respuesta

20

No es una solución ideal, pero aquí hay un ejemplo rápido y sucio que muestra cómo se puede almacenar información de inicio de sesión en el código PHP:

<?php 
session_start(); 

$userinfo = array(
       'user1'=>'password1', 
       'user2'=>'password2' 
       ); 

if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
} 

if(isset($_POST['username'])) { 
    if($userinfo[$_POST['username']] == $_POST['password']) { 
     $_SESSION['username'] = $_POST['username']; 
    }else { 
     //Invalid Login 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Login</title> 
    </head> 
    <body> 
     <?php if($_SESSION['username']): ?> 
      <p>You are logged in as <?=$_SESSION['username']?></p> 
      <p><a href="?logout=1">Logout</a></p> 
     <?php endif; ?> 
     <form name="login" action="" method="post"> 
      Username: <input type="text" name="username" value="" /><br /> 
      Password: <input type="password" name="password" value="" /><br /> 
      <input type="submit" name="submit" value="Submit" /> 
     </form> 
    </body> 
</html> 
+0

¡Gracias! Eso es quizás mejor que el mío. –

+0

Eso no es seguro en absoluto. –

+0

¿Qué tal algunos detalles? –

0

si usted no tiene una base de datos, tendrá que codificar los datos de acceso en el código, o leer desde un archivo plano en el disco.

+1

¿No puedo almacenar detalles de inicio de sesión en variables? –

+0

Puedes, eso es lo que quiere decir con "codificar los detalles de inicio de sesión en tu código". – jimyi

3

Guarde los hashes de nombre de usuario y contraseña en una matriz en un archivo php en lugar de db.

Cuando necesite autenticar al usuario, calcule los valores hash de sus credenciales y luego los compare con los hash en la matriz.

Si utiliza la función hash segura (consulte hash function and hash algos en la documentación de PHP), debería ser bastante seguro (puede considerar usar hash salado) y también agregar algunas protecciones al formulario en sí.

2

Si no tiene una base de datos, ¿dónde se almacenará el registro PERMANENTE de los datos de inicio de sesión de sus usuarios? Claro, mientras el usuario está conectado, la información mínima del usuario requerida para que su sitio funcione se puede almacenar en una sesión o cookie. Pero después de desconectarse, ¿entonces qué? La sesión se va, la cookie puede ser pirateada.

Para que su usuario regrese a su sitio. Él intenta iniciar sesión. ¿A qué cosa confiable compara su sitio su información de acceso?

11

FacebookConnect o OpenID son dos excelentes opciones.

Básicamente, sus usuarios inician sesión en otros sitios de los que ya son miembros (Facebook o Google) y luego obtienen la confirmación de ese sitio que le dice que el usuario es confiable: inicie una sesión y haya iniciado sesión. No se necesita ninguna base de datos (a menos que desee asociar más datos a su cuenta).

+0

La URL https://developers.facebook.com/connect.php ahora muestra * "Lo siento, el enlace que siguió puede estar roto o la página puede haberse eliminado." * - debe eliminarse. –

0

Usted puede hacer el control de acceso a nivel de servidor Web mediante HTTP básico autenticación y htpasswd. Hay una serie de problemas con esto:

  1. No es muy seguro (nombre de usuario y la contraseña son codificados trivialmente en el cable)
  2. Es difícil mantener (hay que iniciar sesión en el servidor para añadir o eliminar usuarios)
  3. No tiene control sobre el cuadro de diálogo de inicio de sesión presentado por el navegador
  4. No hay forma de cerrar la sesión, salvo reiniciar el navegador.

A menos que esté creando un sitio para uso interno con pocos usuarios, realmente no lo recomendaría.

-2

No hay razón para no utilizar la base de datos para la implementación de inicio de sesión, lo mínimo que puede hacer es descargar e instalar SQLite si su empresa de alojamiento no le proporciona suficiente DB.

8

me gustaría utilizar una configuración de dos archivo de la siguiente manera:

index.php

<?php 
session_start(); 

define('DS', TRUE); // used to protect includes 
define('USERNAME', $_SESSION['username']); 
define('SELF', $_SERVER['PHP_SELF']); 

if (!USERNAME or isset($_GET['logout'])) 
include('login.php'); 

// everything below will show after correct login 
?> 

login.php

<?php defined('DS') OR die('No direct access allowed.'); 

$users = array(
"user" => "userpass" 
); 

if(isset($_GET['logout'])) { 
    $_SESSION['username'] = ''; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
} 

if(isset($_POST['username'])) { 
    if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) { 
    $_SESSION['username'] = $_POST['username']; 
    header('Location: ' . $_SERVER['PHP_SELF']); 
    }else { 
     //invalid login 
    echo "<p>error logging in</p>"; 
    } 
} 

echo '<form method="post" action="'.SELF.'"> 
    <h2>Login</h2> 
    <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p> 
    <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p> 
    <p><input type="submit" name="submit" value="Login" class="button"/></p> 
    </form>'; 
exit; 
?> 
0

*** escritura de la conexión que imposible enlace a una base de datos o archivo externo. Bueno para una contraseña global -

Place en la página Formulario de acceso - lugar esta en la parte superior de la página de inicio de sesión - por encima de todo lo demás ***

<?php 

if(isset($_POST['Login'])){ 

if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){ 
session_start(); 
$_SESSION['logged_in'] = TRUE; 
header("Location: ./YourPageAfterLogin.php"); 

}else { 
$error= "Login failed !"; 
} 
} 
//print"version3<br>"; 
//print"username=".$_POST["username"]."<br>"; 
//print"password=".$_POST["username"]; 
?> 

* de sesión en las páginas siguientes - Coloque esto en el la parte superior de cada página que debe protegerse mediante el inicio de sesión. Esto comprueba la sesión y si un nombre de usuario y contraseña ha *

<?php 
session_start(); 
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){ 

header("Location: ./YourLoginPage.php"); 
} 
?> 
+0

¿No es esta solución lo mismo que lo que ya está en la pregunta original? – FoolishSeth

1

Prueba esto:

<?php 
     session_start(); 
     $userinfo = array(
      'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello... 
     ); 

     if(isset($_GET['logout'])) { 
      $_SESSION['username'] = ''; 
      header('Location: ' . $_SERVER['PHP_SELF']); 
     } 

     if(isset($_POST['username'])) { 
      if($userinfo[$_POST['username']] == md5($_POST['password'])) { 
       $_SESSION['username'] = $_POST['username']; 
      }else { 
       header("location:403.html"); //replace with 403 
      } 
     } 
?> 
<?php if($_SESSION['username']): ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
      <title>Logged In</title> 
     </head> 

     <body> 
      <p>You're logged in.</p> 
      <a href="logout.php">LOG OUT</a> 
     </body> 
    </html> 

<?php else: ?> 
    <html> 
     <head> 
      <title>Log In</title> 
     </head> 
     <body> 
      <h1>Login needed</h1> 
      <form name="login" action="" method="post"> 
       <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> 
        <tr> 
         <td colspan="3"><strong>System Login</strong></td> 
        </tr> 
        <tr> 
         <td width="78">Username:</td> 
         <td width="294"><input name="username" type="text" id="username"></td> 
        </tr> 
        <tr> 
         <td>Password:</td> 
         <td><input name="password" type="password" id="password"></td> 
        </tr> 
        <tr> 
         <td>&nbsp;</td> 
         <td><input type="submit" name="Submit" value="Login"></td> 
        </tr> 
       </table> 
      </form> 
     </body> 
    </html> 
<?php endif; ?> 

Usted necesitará un cierre de sesión, algo como esto (logout.php):

<?php 
    session_start(); 
    session_destroy(); 
    header("location:index.html"); //Replace with Logged Out page. Remove if you want to use HTML in same file. 
?> 

// Below is not needed, unless header above is missing. In that case, put logged out text here. 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>Untitled Document</title> 
    </head> 
    <body> 
     <!-- Put logged out message here --> 
    </body> 
</html> 
+3

Frank, buena respuesta - fue aceptada sin embargo, la pregunta había sido contestada y la respuesta. Si se quiere explicar por qué su respuesta es diferente o mejor que la respuesta aceptada, eso podría ayudar. –

Cuestiones relacionadas