Las sesiones son una forma sencilla de almacenar datos para usuarios de manera individual usando un ID de sesión único. Esto se puede usar para hacer persistente la información de estado entre peticiones de páginas. Los ID de sesiones normalmente son enviados al navegador mediante cookies de sesión, y el ID se usa para recuperar los datos de sesión existente. La ausencia de un ID o una cookie de sesión permite saber a PHP para crear una nueva sesión y generar un nuevo ID de sesión.
Las sesiones siguen un flujo de trabajo sencillo. Cuando una sesión se inicia, PHP recuperará una sesión existente usando el ID pasado (normalmente desde una cookie de sesión) o, si no se pasa una sesión, se creará una sesión nueva. PHP rellenará la variable superglobal $_SESSION con cualesquiera datos de sesión de que se inicie la seisón. Cuando PHP se cierra, automáticamente toma el contenido de la variable superglobal $_SESSION, la serializa, y la envía para almacenarla usando el gestor de almacenamiento de sesiones.
Por omisión, PHP usa el gestor interno de almacenamiento files
, el cual
se establece mediante session.save_handler.
Éste guarda los datos de sesión en el servidor en la ubicación especificada por la
directiva de configuración session.save_path.
Las sesiones se puede iniciar manualmente usando la función session_start(),
si la directiva session.auto_start se establece
a 1
, una sesión se iniciará automáticamente ante cualquier petición de arranque.
Las sesiones normalmente se cierran automáticamente cuando PHP termina de ejecutar un script, pero se pueden cerrar manualmente usando la función session_write_close().
Ejemplo #1 Registrar una variable con $_SESSION.
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
Ejemplo #2 Desregistrar una variable con $_SESSION
<?php
session_start();
unset($_SESSION['count']);
?>
NO destruya completamente $_SESSION con unset($_SESSION) ya que esto deshabilitará el registro de las variables a través del array superglobal $_SESSION.
No se pueden usar referencias en variables de sesión ya que no hay una manera viable de restarurar una referencia a otra variable.
register_globals sobreescribirá las variables en el ámbito global, cuyos nombres son compartidos con las variables de sesión. Por favor véase Uso de Register Globals para más detalles.
Nota:
Las sesiones basadas en ficheros (lo predeterminado en PHP) lock the session file once a session is opened via session_start() or implicitly via session.auto_start. Once locked, no other script can access the same session file until it has been closed by the first script terminating or calling session_write_close().
This is most likely to be an issue on Web sites that use AJAX heavily and have multiple concurrent requests. The easiest way to deal with it is to call session_write_close() as soon as any required changes to the session have been made, preferably early in the script. Alternatively, a different session backend that does support concurrency could be used.