2009-10-08 11 views
93

Los archivos de sesión generalmente se almacenan en, por ejemplo, /tmp/ en el servidor y se llaman sess_{session_id}. He estado mirando los contenidos y no puedo entender cómo funcionan realmente.¿Cómo funcionan las sesiones de PHP? (no "¿cómo se usan?")

La obtención del 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 tiene más de una ventana del navegador abierta.

Entonces, ¿cómo funciona?

+0

Eche un vistazo a http://stackoverflow.com/questions/523703/is-my-understanding-of-php-sessions-correct – adatapost

Respuesta

156

En la situación general:

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

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


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


Para obtener más información, puede consultar la sección Session Handling del manual, que proporciona algunas informaciones útiles.

Por ejemplo, hay una página acerca de Passing the Session ID, que explica cómo se pasa la identificación de la sesión de una página a otra, utilizando una cookie o en las URL, y qué opciones de configuración afectan a esto.

+4

Super explicación. Muchas gracias :) – Christoffer

+1

De nada :-) –

+5

¿Cómo maneja las sesiones normalmente un dispositivo móvil (desde una aplicación nativa)? ¿Almacenar una ID de sesión? ¿O es esto donde apareció OAuth? –

4

La ID de la sesión es aleatoria y se transmite 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.

1

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, en la página. Se verá así: <?php session_start();?><html><head> ....... etc. La función session_start() genera un identificador 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 realmente se almacena en del 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 hosting lo dejarán en paz). Para hacer referencia al identificador de sesión en su código PHP, por lo tanto, haría referencia a la variable $ PHPSESSID (es un nombre de cookie, recuerde que de Cookies?)

7

¿Cómo funciona PHP Sesión Obras

  • En primer lugar PHP crea una larga serie de 16 bytes (identificador exclusivo 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.

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

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

  • Si PHP obtiene ese número único de identificación de la cookie PHPSESSID (en cada solicitud), 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 expira el período predeterminado de tiempo de la sesión. Estos son los pasos simples del mecanismo que PHP está usando para manejar la sesión. Espero que este artículo te ayude a comprender cómo funciona PHP SESSION.

Consulte este artículo para obtener más detalles. How Does PHP Session Works

Cuestiones relacionadas