¿Cómo funcionan las sesiones PHP? (no "¿cómo se usan?")

127

Los archivos de sesión generalmente se almacenan, por ejemplo, /tmp/en el servidor y se nombran sess_{session_id}. He estado mirando los contenidos y no puedo entender cómo funcionan realmente.

Obtener el nombre de la variable y el contenido del archivo es fácil. Pero, ¿cómo sabe PHP qué sesión pertenece a quién?

El session_id parece totalmente aleatorio y una dirección IP puede tener varios usuarios, y cada usuario puede tener varias sesiones si tienen abierta más de una ventana del navegador.

¿Entonces, cómo funciona?

Christoffer
fuente
Eche un vistazo a stackoverflow.com/questions/523703/…
adatapost

Respuestas:

202

En la situación general:

  • la identificación de la sesión se envía al usuario cuando se crea su sesión.
  • se almacena en una cookie (llamada, por defecto PHPSESSID)
  • esa cookie es enviada por el navegador al servidor con cada solicitud
  • el servidor (PHP) usa esa cookie, que contiene el session_id, para saber qué archivo corresponde a ese usuario.

Los datos en los archivos de sesiones son el contenido de $_SESSION, serializado (es decir, representado como una cadena, con una función como serializar ) ; y no se serializa cuando PHP carga el archivo para llenar la $_SESSIONmatriz.


A veces, la identificación de la sesión no se almacena en una cookie, sino que también se envía en URL, pero eso es bastante raro hoy en día.


Para obtener más información, puede consultar la sección Manejo de sesión del manual, que brinda información útil.

Por ejemplo, hay una página sobre Pasar la ID de sesión , que explica cómo se pasa la identificación de la sesión de una página a otra, usando una cookie o en URL, y qué opciones de configuración afectan esto.

Pascal MARTIN
fuente
55
¿Cómo maneja normalmente un dispositivo móvil (desde una aplicación nativa) las sesiones? ¿Almacenar una ID de sesión? ¿O es esto donde viene OAuth?
Adam Waite
13

¿Cómo funciona la sesión PHP?

  • En primer lugar, PHP crea un número de identificador único de 16 bytes de longitud (almacenado como una cadena de 32 caracteres hexadecimales, por ejemplo a86b10aeb5cd56434f8691799b1d9360) para una sesión individual.

  • La cookie PHPSESSID pasa ese número de identificación único al navegador de los usuarios para guardar ese número.

  • Se crea un nuevo archivo en el servidor con el mismo nombre de número de identificación único con prefijo sess_ (es decir sess_a86b10aeb5cd56434f8691799b1d9360).

  • El navegador envía esa cookie al servidor con cada solicitud.

  • Si PHP obtiene ese número de identificación único de la cookie PHPSESSID (en cada solicitud), entonces PHP busca en el directorio temporal y compara ese número con el nombre del archivo. Si ambos son iguales, recupera la sesión existente, de lo contrario, crea una nueva sesión para ese usuario.

Una sesión se destruye cuando el usuario cierra el navegador o abandona el sitio. El servidor también finaliza la sesión después de que expire el período predeterminado de tiempo de sesión. Estos son los pasos simples del mecanismo que PHP está utilizando para manejar la sesión. Espero que este artículo te ayude a entender cómo funciona PHP SESSION.

Vea este artículo para más detalles. ¿Cómo funciona la sesión PHP?

Sohel Rana
fuente
Pero si, por ejemplo, estoy conectado a un sitio determinado (también conocido como: en una sesión) y abro una nueva pestaña mysite.com/cart. También recibiré mi "Hola Joe Doe, 5 mensajes, aquí está tu lista de la cesta de la compra ..." también conocida como información de la sesión. - Pero, ¿por qué el navegador con respecto a esta pestaña en blanco enviaría cualquier ID de sesión junto con la solicitud GET? actualización rápida: Ah, encontré la respuesta: +)
Frank Nocke
¿Puedo preguntar cómo puede proporcionar seguridad la identificación de la sesión?
Andrewboy
4

La ID de la sesión es aleatoria y se pasa en una cookie o en la URL, según la configuración. Es posible que ya haya visto este PHPSESSID = xxxx en algunas URL, también hay una cookie con ese nombre.

Julien Lebosquain
fuente
2

Las sesiones en PHP se inician utilizando la función session_start (). Al igual que la función setcookie (), la función session_start () debe aparecer antes que cualquier HTML, incluidas las líneas en blanco, de la página. Se verá así: <?php session_start( );?><html><head> ....... etc. La función session_start () genera un Id. De sesión aleatorio y lo almacena en una cookie en la computadora del usuario (esta es la única información de sesión que se almacena realmente en el lado del cliente. ) El nombre predeterminado para la cookie es PHPSESSID, aunque esto se puede cambiar en los archivos de configuración de PHP en el servidor (sin embargo, la mayoría de las empresas de alojamiento lo dejarán en paz). variable $ PHPSESSID (es un nombre de cookie; ¿recuerda eso de Cookies?)

Akbor
fuente