2010-01-11 16 views
7

Soy bastante nuevo en PHP y estoy buscando algunas mejores prácticas sobre cómo implementar la autenticación en PHP.¿Cuál es la mejor manera de crear una página de inicio de sesión de PHP?

Soy un evangelista para Adobe y una de las cosas que me molesta es cuando las personas usan Flex/Flash para la pantalla de inicio de sesión. Así que quiero hacer una publicación de blog/ejemplo sobre el uso de una página de inicio de sesión HTML/PHP y luego pasar la información de la sesión a Flex, después de que se haya establecido la sesión.

Todavía estoy entendiendo exactamente lo que PHP necesita para crear una sesión válida y cómo se establecen las cookies. Entonces, los ejemplos o la información que específicamente se relacionan con eso serían muy útiles.

Gracias de antemano,

= Ryan [email protected]

+0

Usted puede Quiero echarle un vistazo a https://github.com/delight-im/PHP-Auth, que es agnóstico tanto del marco como de la base de datos. – caw

Respuesta

7

Como se ha dicho, crear un sistema de autenticación robusto y seguro en PHP es bastante fácil, pero los fundamentos son fáciles de comprender.

Lo primero que debe hacer es llamar al session_start(). Una vez que haya hecho esto se puede conseguir y variables de sesión definido con el $_SESSION superglobal:

session_start(); 
$_SESSION['foo'] = $foo; 
$bar = $_SESSION['bar']; 

Una vez que haya hecho esto se puede establecer datos de acceso para el usuario actual en un registro de éxito en y hacer que persisten sobre páginas (recuerde llamar al session_start antes de usarlas). Además, se debe llamar al session_start antes de enviar cualquier contenido al navegador.

Sin embargo, existen cuestiones de seguridad que deben tenerse en cuenta, como la fijación de sesiones y el robo de cookies. Un enfoque para la fijación de sesiones, por ejemplo, es regenerar la ID de la sesión del usuario al elevar los privilegios usando PHP session_regenerate_id (o algo así).

El PHP Security Consortium tiene mucha información útil.

Las cookies se pueden manipular utilizando la función setcookie.

+0

Cuando dices "lo primero que quieres hacer es llamar a session_start()" ¿quieres decir que debería hacer eso incluso antes de que compruebe las credenciales de inicio de sesión? Parece que es la forma correcta de implementarlo y luego, con un inicio de sesión exitoso, cambiaría esas variables de sesión (digamos, cambie $ _SESSION ['logged_in'] de falso a verdadero). ¿Es eso correcto? – ryanstewart

+0

Sí, eso es correcto. No puede acceder a '$ _SESSION' sin inicializar primero la sesión; tienes que hacer esto en cada página. –

2

Eso es un tema bastante amplio. Sin embargo, una buena comprensión de las sesiones/cookies sería una buena base. Deberías echarle un vistazo al Chris Shiflett's blog; tiene muchas buenas publicaciones sobre estos temas.

soy un evangelista de Adobe y una de las cosas que me molesta es cuando la gente usa Flex/Flash para la pantalla de inicio de sesión. Así que quiero hacer una publicación de blog/ejemplo sobre el uso de una página de inicio de sesión HTML/PHP y luego pasar la información de la sesión a Flex, después de que se haya establecido la sesión.

No estoy del todo seguro de su objetivo aquí. ¿Necesita el componente Flash para autenticar al usuario? Como se trata de una tecnología del lado del cliente, dicha autenticación tendría un alcance limitado.

+0

En muchos casos, Flash/Flex manejará la sesión y hablará directamente con PHP para autenticarse. Entonces, lo que quiero hacer es usar los ganchos de HTML en Flash Player para extraer la información de sesión/cookie "normal" que se usaría en una página de inicio de sesión de PHP normal y pasarla a Flash Player para que el jugador pueda realizar solicitudes autenticadas. al servidor PHP – ryanstewart

-9

Vuelca PHP y entra en ASP.NET. Todo esto ya está hecho, junto con los detalles de seguridad y membresía. =)

+4

Lol este comentario no tiene valor y simplemente llameante. Pero creo que ya había votado lo suficiente por ahora – Alfred

+0

Ojalá alguien me hubiera dado un consejo tan "inútil" cuando comencé en PHP hace años. =) ¿Alguien quiere una pila de revistas PHP Architect? Qué vergüenza ponerlos en la chimenea. –

2

Crear nombre de usuario.php página con un formulario algo como:

<form method="post" action="login.php"> 
<input type="text" name="username"> 
<input type="password" name="password"> 
<input type="submit" name="submLogin"> 
</form> 

Publique sus lógica php:

<? 
if(isset($submLogin)) 
{ 
$username = $_POST['username']; 
$password = $_POST['password']; 

// run checks on vars not to pass on silly data + escape chars 

$query_login = 'SELECT * FROM users 
WHERE username = ' . $username . ' AND password = ' . $password . ' LIMIT 1'; 
$login = mysql_query($query_login, $db_connection) or die(); 
$login_result = mysql_num_rows($login); 

if($login_result == 1) 
{ 
    // success 
    session_start(); 
    $_SESSION['logged_in'] = TRUE; 
    // redirect somewhere, set cookies, do whatever you want to do on success 
} 
else 
{ 
    // fail 
    // display error or redirect 
} 
} 
?> 

$ db_connection variable es el identificador de enlace - resultado de mysql_connect() o mysql_pconnect()

+1

Usar directamente el nombre de usuario y la contraseña en la consulta SQL es una manera muy insegura contra la inyección de SQL. Al menos debe usar la función htmlentities para borrar el nombre de usuario y la contraseña antes de usar en la consulta SQL. Solo para tu información. – mdikici

+0

@subet Acabo de tener uno de esos momentos de "Quién escribió esto" cuando miré mi código de arriba. Sí, definitivamente no hagas lo que hice en mi respuesta y desinfecte la entrada. Por otra parte, se menciona en los comentarios (en el código). – LukeP

Cuestiones relacionadas