¿Qué son las cookies y las sesiones, y cómo se relacionan entre sí?

86

Estoy tratando de entender las cookies y las sesiones de manera profesional. Sé que cuando un navegador se conecta a un servidor, el servidor "le pide" al navegador que "pegue" una cookie con "phpsessid" en la carpeta de cookies del navegador del cliente.

Ahora que tenemos el "phpsessid", si el cliente ingresa al servidor, el navegador envía al servidor el "phpsessid" y el servidor echa un vistazo a la carpeta tmp y si tenemos una coincidencia, vuelve a cargar todos los datos que tiene el usuario. este cliente, pero estoy un poco confundido con el proceso.

Estaré agradecido si alguien puede ayudarme a comprender esos procesos de creación de una sesión y cookies, lo que está sucediendo detrás de escena.

Texto en blanco
fuente
Parece que ya sabes lo que está pasando. ¿En qué parte específica te gustaría iluminarte? ¿La parte HTTP / cookie o cómo PHP carga la tienda de sesiones?
mario
La cookie que el navegador guarda con phpsessid, ¿es este phpsessid para identificar al cliente para crear sesiones y cookies?
Blanktext
La cookie que tiene el navegador contiene el ID de sesión php, que le dice al servidor "hey, conozco este capítulo", el servidor luego toma los datos de la sesión (de / tmp / por ejemplo) y restaura al usuario $ _SESSION
somedev
Sí, lo sé, pero estoy preguntando si este "phpsessid" se usa para identificar al cliente antes de crear sesiones y cookies, si este phpsessid se incluye dentro de los datos de las cookies y la computadora del cliente y dentro del archivo de sesión en la carpeta tmp del servidor. ?
Blanktext

Respuestas:

171

Repasemos esto:

Las cookies y las sesiones son ambas formas de preservar el estado de la aplicación entre las diferentes solicitudes que realiza el navegador. Es gracias a ellos que, por ejemplo, no necesita iniciar sesión cada vez que solicita una página en StackOverflow .

Galletas

Las cookies son pequeños bits de datos, (máximo de 4 KB de longitud), que contienen datos en pares clave = valor:

name=value; name2=value2

Estos se establecen mediante JavaScript o mediante el servidor mediante un encabezado HTTP .

Las cookies tienen una fecha de caducidad establecida, por ejemplo, usando encabezados HTTP:

Set-Cookie: name2=value2; Expires=Wed, 19 Jun 2021 10:18:14 GMT

Lo que haría que el navegador estableciera una cookie denominada name2con un valor de value2, que caducaría en unos 9 años.

Las cookies se consideran muy inseguras porque el usuario puede manipular fácilmente su contenido. Es por eso que siempre debe validar los datos de las cookies . No asuma que lo que obtiene de una cookie es necesariamente lo que espera.

Las cookies se utilizan generalmente para preservar el estado de inicio de sesión, donde un nombre de usuario y un hash especial se envían desde el navegador, y el servidor los compara con la base de datos para aprobar el acceso.

Las cookies también se utilizan a menudo en la creación de sesiones .

Sesiones

Las sesiones son ligeramente diferentes. Cada usuario obtiene un ID de sesión , que se envía de vuelta al servidor para su validación, ya sea por cookie o por variable GET .

Las sesiones suelen ser de corta duración, lo que las hace ideales para guardar un estado temporal entre aplicaciones. Las sesiones también caducan una vez que el usuario cierra el navegador.

Las sesiones se consideran más seguras que las cookies porque las propias variables se guardan en el servidor . Así es como funciona:

  1. El servidor abre una sesión (establece una cookie a través del encabezado HTTP)
  2. El servidor establece una variable de sesión.
  3. Página de cambios de cliente
  4. El cliente envía todas las cookies, junto con el ID de sesión del paso 1.
  5. El servidor lee el ID de sesión de la cookie.
  6. El servidor coincide con el ID de sesión de una lista en una base de datos (o memoria, etc.).
  7. El servidor encuentra una coincidencia, lee las variables que ahora están disponibles en $_SESSIONsuperglobal.

Si PHP no encuentra una coincidencia, iniciará una nueva sesión y repetirá los pasos del 1 al 7.

Puede almacenar información confidencial en una sesión porque se guarda en el servidor, pero tenga en cuenta que la identificación de la sesión aún puede ser robada si el usuario, digamos, inició sesión a través de una red WiFi insegura. (Un atacante puede olfatear las cookies y configurarlas como propias, no verá las variables en sí, pero el servidor identificará al atacante como el usuario).


Esa es la esencia. Puede obtener más información en el manual de PHP sobre ambos temas.

Fantasma de Madara
fuente
1
Entonces, ¿eso significa que las cookies deben estar activadas para que las sesiones funcionen?
bigpotato
1
@Edmund: En la mayoría de los casos, sí. Sin embargo, puede configurarlo para que las ID de sesión se transmitan a través de la variable GET (lo que significaría que el session_id debería agregarse a cada página ( hello.php?sid=cbe709ac7bed98f7ecb89713)
Madara's Ghost
¿Qué significa exactamente cerrar el navegador en dispositivos Android o iPhone? detener la aplicación? apagar el dispositivo? cerrar todas las pestañas y salir? etc
Vandervals
2
@SurajJain Sería, si no fuera por las cookies de "recordarme", que persisten más.
Madara's Ghost
4
otra pregunta: Cuando el usuario cierra el navegador, ¿cómo se notifica al servidor este evento para que el servidor elimine esta ID de sesión? ¿O caduca automáticamente después de algún tiempo?
user2774480