Las sesiones son una forma sencilla de almacenar datos individuales para cada usuario mediante un identificador de sesión único. Pueden utilizarse para persistir información entre varias páginas. Los identificadores de sesión se envían normalmente al navegador a través de cookies de sesión, y el identificador se utiliza para recuperar los datos existentes de la sesión. La ausencia de un identificador o de una cookie de sesión indica a PHP que debe crear una nueva sesión, generando así un nuevo identificador de sesión.
Las sesiones siguen una cinemática simple. Cuando se inicia una sesión, PHP recuperará una sesión existente utilizando el identificador de sesión pasado (habitualmente desde una cookie de sesión) o, si no se pasa ningún identificador de sesión, creará una nueva sesión. PHP poblará entonces la variable superglobal $_SESSION con todos los datos de la sesión una vez iniciada. Cuando PHP finaliza, tomará automáticamente el contenido de la variable superglobal $_SESSION, lo serializará y lo enviará para su almacenamiento al gestor de guardado de sesión.
Por omisión, PHP utiliza internamente el gestor de guardado files
que está definido mediante la directiva session.save_handler.
Los datos de sesión se guardarán en el servidor en el lugar especificado por
la directiva de configuración session.save_path.
Las sesiones pueden iniciarse manualmente utilizando la función
session_start(). Si la directiva de configuración
session.auto_start está definida como
1
, una sesión se iniciará automáticamente al comienzo
de la solicitud.
Las sesiones se detienen automáticamente cuando PHP ha terminado de ejecutar un script, pero pueden detenerse manualmente utilizando la función session_write_close().
Ejemplo #1 Almacenar una variable con $_SESSION.
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
Ejemplo #2 Eliminar una variable de sesión con la superglobal $_SESSION.
<?php
session_start();
unset($_SESSION['count']);
?>
No utilice la función unset()
con $_SESSION de la forma
unset($_SESSION)
ya que esto hará imposible
el almacenamiento de datos en la sesión utilizando la superglobal
$_SESSION.
No se pueden utilizar referencias en variables de sesión ya que no hay ninguna manera factible de restaurar una referencia a otra variable.
Nota:
Las sesiones basadas en ficheros (por omisión en PHP) bloquean el fichero de sesión cuando una sesión se abre mediante la función session_start() o implícitamente mediante la directiva de configuración session.auto_start. Una vez bloqueado, ningún otro script puede acceder al mismo fichero de sesión hasta que la sesión no haya sido cerrada por el script que la abrió, o hasta que la función session_write_close() no haya sido llamada.
Esto puede ser problemático para los sitios web que utilizan AJAX y producen múltiples solicitudes concurrentes. La forma más sencilla de evitar este problema es llamar a la función session_write_close() una vez que se hayan realizado los cambios en la sesión, preferiblemente al principio del script. También se puede utilizar otro gestor de sesión que soporte concurrencia.