2010-07-01 22 views
7

Nuevo en php Sesiones aquí. Mis datos de usuario almacenados son bastante menores y no muy delicados, pero, por supuesto, aún quiero un sitio seguro. He almacenado su hash de contraseña en mi db con salt.¿Es común almacenar una contraseña de usuario en una sesión de PHP?

¿Debo validar a un usuario en cada página de mi sitio usando su contraseña, o es esa exageración? En otras palabras, si han "iniciado sesión" exitosamente y he almacenado su nombre de usuario en una sesión de php, ¿es lo suficientemente bueno para que vaguen por ahí, con el sitio sabiendo quiénes son?

Lo pregunto porque parece que almacenar la contraseña de un usuario en una sesión probablemente no sea la mejor idea. ¿Es eso cierto?

Respuesta

8

que no es necesario para autenticar en cada petición, pero sí es necesario para Autorizar en cada petición.

Autenticación es donde usted valida el nombre de usuario/contraseña del usuario contra la base de datos. Una vez que se hayan autenticado correctamente, solo necesita almacenar su ID de usuario (o nombre de usuario) en la sesión.

En cada solicitud posterior, verifique que la sesión actual sea autorizada para ver el contenido solicitado. En su caso, probablemente solo necesite asegurarse de que haya una identificación de usuario válida en la sesión ... no tiene que hacer nada con la base de datos.

Es posible utilizar una función similar a la siguiente para autorizar en cada petición:

function isAuthorized() { 
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0); 
} 

Puede hacer esto aún más segura mediante la gestión de sus propios datos de la sesión en una base de datos y no tiene para depositar mucha fe en las cookies, que pueden ser intercambiadas/robadas/etc. por usuarios (maliciosos). Pero eso suele ser excesivo para la mayoría de las aplicaciones web.

2

No almacenaría la contraseña en la sesión, solo puede almacenar que han iniciado sesión en la sesión.

$_SESSION['uerlogged'] = $mytoken; 

Luego, cada página de comprobación de carga para ver si se ajusta $_SESSION['userlogged'].

También es posible que desee considerar la adición de precauciones para la sesión al secuestro Tome un vistazo a - PHP: Preventing Session Hijacking with token stored as a cookie?

+0

Oops, perdón por eso sobrescribir ... – Piskvor

5

No guarde la contraseña. En su lugar, almacene un token de autenticación que puede verificar si existe en una tabla separada.

1

No debería ser realmente necesario almacenar una contraseña en una sesión. Debería tener indicadores de estado para mostrar si están autenticados actualmente o no junto con algún tipo de objeto que defina quién es el usuario y la información sobre ellos.

0

Almacenar la contraseña en la sesión no es diferente de almacenar el nombre de usuario en la sesión una vez que el usuario inició sesión, por lo tanto, no almacene la contraseña.

Simplemente funcionará como el nombre de usuario almacenado, que es suficiente (incluso una bandera).

0

Los usuarios no pueden modificar las sesiones, puede almacenar solo el nombre de usuario allí y confiar en que siempre será correcto.

Cuestiones relacionadas