A veces, por la razón que sea, es necesario cambiar la sesión activa de PHP por una nueva, o simplemente recuperar una sesión antigua de un usuario, con las siguientes tres líneas de código podemos lograr ésto.
session_write_close(); session_id('nombreOtraSesion'); session_start();
Con esas tres líneas logramos cerrar la sesión activa y cambiarla por otra sesión. Ahora la explicación:
De antemano se infiere que ya tenemos una sesión previamente inicializada con session_star(); lo que hacemos con la linea de session_write_close(); es guardar toda la información que se haya almacenado en el arreglo $_SESSION[] que tenemos activo en ése momento.
En la línea 2, session_id(XXX) ingresamos el ID de una sesión que haya existido previamente o el de una nueva sesión (recomiendo el uso de algún hash sencillo pues éste valor no puede aceptar caracteres especiales ni latinos). Ésto prepara al script a que la sesión que se ha de usar a partir de éste punto será la que tenga el identificador que hayamos ingresado
Finalmente la línea 3, session_start() arranca formalmente el uso de la sesión como regularmente lo haríamos al inicializar una sesión común de PHP.
Ahora un ejemplo
<?php session_id('sesionuno'); //iniciamos la primera sesion session_start(); $_SESSION['valor'] = 'Soy un valor en la sesion 1!'; //guardamos una variable llamada 'valor' en esta sesion echo session_id().''; echo $_SESSION['valor'].'
'; session_write_close(); //cerramos y guardamos la primera sesion session_id('sesiondos'); //iniciamos una nueva sesion session_start(); $_SESSION['valor'] = 'Yo soy otro valor en la sesion 2!'; //guardamos una variable tambien llamada 'valor' en esta otra sesion echo '+-------+
'; echo session_id().'
'; echo $_SESSION['valor'].'
'; session_write_close(); //cerramos y guardamos la segunda sesion session_id('sesionuno'); //nos volvemos a la primera sesion session_start(); echo '+-------+
'; echo $_SESSION['valor']; // imprimimos el contenido de la variable 'valor' de la sesion activa en este momento que es la primera ?>
Al ejecutar el código anterior, la salida sería algo similar a lo siguiente:
sesionuno Soy un valor en la sesion 1! +-------+ sesiondos Yo soy otro valor en la sesion 2! +-------+ Soy un valor en la sesion 1!
Como podemos notar, es posible cambiar entre sesiones durante la ejecución de un mismo script, y ambas sesiones mantendrán sus propios valores. Usé en ambos casos el mismo nombre de variable valor para demostrar que son independientes una sesión de la otra.
Si quisieramos recuperar una sesión previa o una sesión de otro usuario o de otro navegador, lo que podríamos hacer es obtener el ID de la sesión actual con session_id(); sin parámetros, ya que esa función nos devuelve el identificador único generado por PHP al momento de crear una sesión regular. Posteriormente usar ese ID guardado para recuperar la sesión de nuevo con session_id('idGuardado'), de ésta forma tendrémos la sesión íntegra que el usuario tenía en otro navegador por ejemplo.
Es importante notar que PHP tiene una limpieza automatizada de sesiones que no se usan, hay que considerar ésto para el momento de intentar recuperar una sesión, pues la duración de las mismas depende de la configuración de cada servidor PHP.
¡Felices Sentencias!