Sistema de inicio de sesión Cookies / Sesiones

Cuando un usuario inicia sesión obtengo su ID y la guardo en una sesión de 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.

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

¿cómo autenticas a tus usuarios?

// Newbie

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 progtwigció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 $_SESSION . En cada solicitud en las páginas restringidas, solo verifica si el User conectado está disponible en $_SESSION y maneja la solicitud en consecuencia, es decir, continúa con ella o redirige a una página de inicio de sesión o error. Al desconectarse, simplemente elimine al User de $_SESSION .

Si desea agregar una opción Recordarme en esta computadora , necesitará 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 PHP lo hizo al verificar la cookie con el nombre phpsessionid en su phpsessionid .

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.

Intentaría encontrar un motor de sesión para que no tenga que lidiar con el 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 vista de página y guardando toda la información de la sesión en una base de datos en su servidor para evitar problemas de seguridad y alteración del usuario.

Como menciona BalusC , las funciones session_ en php son el camino a seguir, tu 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 problemas 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 objectives (como POST). Pero eso no estaba exento de riesgos.) 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 de 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 tiempo de desarrollo valioso para desarrollar su propio sistema de sesión. Recomendaría este enfoque para cualquier sistema que desee implementar en el mundo real.

OTOH, si quieres aprender sobre sesiones de PHP y problemas de seguridad, definitivamente debes hacerlo tú mismo, aunque solo sea para entender cómo no hacerlo 😉