2009-12-25 10 views
10

Cuando un usuario inicia sesión obtengo su ID y la guardo en una sesión var. Lo que me pregunto es si este es el camino a seguir. ¿O debería usar cookies? para que inicie sesión automáticamente y así sucesivamente.Sistema de inicio de sesión de Cookies/Sesiones

session_start(); 


ifcorrectlogin { 
$_SESSION['id'] = mysql_result($loginQuery, 0, 'user_id'); 
} 

¿cómo se autentica a los usuarios?

// Novato

+0

Bienvenido a StackOverflow. Gran primera pregunta! – Sampson

+1

gracias! prepárese para más preguntas; P – Erkka

Respuesta

1

Las cookies se pueden manipular muy fácilmente. Administrar inicio/cierre de sesión con Sesiones. Si lo desea, puede almacenar los usuarios emailaddress/username en una cookie y llenar el cuadro de nombre de usuario para ellos la próxima vez que visiten después de que haya expirado la presente sesión.

+0

La primera oración es un poco paradójica. PHP mantiene la sesión con la ayuda de una cookie. Solo asegúrate de que el valor de la cookie sea lo suficientemente fuerte. – BalusC

+0

Balus, creo que veo cómo mi respuesta podría ser un poco confusa. Después de leer el suyo, me parece que hemos ofrecido la misma solución. – Sampson

1

Intentaré encontrar un motor de sesión para que no tenga que ocuparse del misceláneo. problemas de seguridad que te muerden el culo si haces la más mínima cosa mal. Yo uso django, que tiene un motor de sesión integrado. No conozco las otras ofertas en el campo, aunque supongo que la mayoría de los frameworks tendrían uno. La forma en que lo hicieron en django fue colocando un hash criptográfico en las cookies del usuario que se actualiza cada página y guardando toda la información de sesión en una base de datos en su servidor

5

Sí, este es el camino a seguir. La sesión en sí ya cuenta con el respaldo de una cookie para eliminar cualquier esfuerzo de programación en torno a eso. La sesión (en realidad, la cookie) se mantendrá mientras el usuario tenga abierta la instancia del navegador o hasta que la sesión caduque en el servidor porque el usuario no visitó el sitio durante un tiempo determinado (por lo general, alrededor de 30 minutos).

Al iniciar sesión, simplemente coloque el User obtenido en el $_SESSION. En cada solicitud en las páginas restringidas, simplemente verifique si el User conectado está disponible en el $_SESSION y maneje la solicitud en consecuencia, es decir, continúe con él o redirija a una página de inicio de sesión o error. Al cerrar la sesión, simplemente elimine User del $_SESSION.

Si desea agregar una opción de Recordarme en esta computadora, tendrá que agregar otra cookie que viva más tiempo que la sesión. Solo necesita asegurarse de generar un valor largo, único y difícil de adivinar para la cookie, de lo contrario, es muy fácil de hackear. Mire cómo lo hizo PHP al marcar la cookie con el nombre phpsessionid en su navegador web.

+0

así que si entiendo correctamente si un usuario quiere ser "recordado" debería guardar una cadena única en una cookie y en el archivo db y cuando el usuario visita nuevamente compruebo si la cookie existe y si existe la comparo con el uno en el db? – Erkka

+1

Casi bueno. Cuando un usuario ** sin iniciar sesión ** visita, luego marca en DB para el 'Usuario' asociado y luego '' automágicamente '' inicia sesión. Alguna vez he publicado una respuesta que cubre exactamente eso, puede que le sea útil también: http://stackoverflow.com/questions/1877242/keep-user-logged-in-when-he-visit-the-same-page-again/1877304#1877304 – BalusC

0

Como BalusC menciona, las session_ -funciones en php son el camino a seguir, su idea básica es el sonido. Pero todavía hay muchas realizaciones diferentes, algunas de ellas tienen sus riesgos. Por ejemplo, como explica Jonathan Samson, el uso de cookies puede generar agujeros de seguridad.

Mi PHP está un poco oxidado, pero recuerdo que las funciones session_ también pueden usar identificadores de sesión codificados en URL. (También había una opción para agregar esto automáticamente a todos los enlaces locales (como GET) y formar objetivos (como POST). Pero eso no estaba exento de riesgos, tampoco). Una forma de evitar el secuestro de sesión copiando el SID es recordar la dirección IP y compararla para cualquier solicitud que tenga una ID de sesión válida a IP que envió esta solicitud.

Como puede ver, el método subyacente es solo el comienzo, hay muchas más cosas que considerar.La recomendación por SapphireSun es, por lo tanto, algo a tener en cuenta: al utilizar una biblioteca bien probada, puede obtener un buen nivel de seguridad, sin utilizar un valioso tiempo de desarrollo para desarrollar su propio sistema de sesión. Recomendaría este enfoque para cualquier sistema que desee implementar en el mundo real.

otoh, si usted quiere aprender acerca de las sesiones de PHP y cuestiones de seguridad, debería hacerlo por sí solo, aunque sólo sea para comprender cómo no hacerlo ;-)

Cuestiones relacionadas