Regardless, if you need to set the header 'Location:' before closing the session; explicitly close the php script with "exit()" or "die()" functions. Remember that when a php script ends, the session automatically are going to be closed.
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 la sesión iniciada. 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.
Nota:
Las sesiones basadas en ficheros (lo predeterminado en PHP) bloquean el fichero de sesión una vez que una sesión se abre vía session_start() o implícitamente vía session.auto_start. Mientras esté bloqueado, ningún otro script puede acceder al mismo fichero de sesión hasta que haya sido cerrado al terminar de ejecutarse el primer script, o llamando a session_write_close().
Esto suele provocar problemas en aquellos sitios Web que realizan muchas peticiones AJAX y tienen solicitudes mútliples ejécutandose a la vez. La manera más fácil de lidiar con esto es llamando a session_write_close() tan pronto como se haya realizado un cambio requeirdo a la sesión, preferiblemente antes de finalizar el script. Alternativamente, se podría utilizar una sesión diferente en segundo plano que admita concurrencia.