Fusión de sesiones en PHP

Noviembre 2016


Las sesiones en PHP suelen ser utilizadas para administrar la sección de miembros de los sitios Web. Así, es posible abrir una misma cuenta de usuario en varios PCs. Sin embargo, cada PC tendrá su sesión (la sesión es una cookie enviado al navegador Web). El código de más abajo es una demostración de cómo funciona, pero deben ser efectuados algunos ajustes en cuanto a la autenticación durante la implementación.

Para algunos usos, puede ser interesante utilizar una sesión común a varios PCs. Esto es lo que propongo ver aquí.


Como funcionan las sesiones


Las variables guardadas en $_SESSION[] son guardadas en el servidor Web por la librería PHP. La carpeta que contiene los archivos de la sesión está definida en el archivo php.ini. Su nombre es session.save_path y su valor por defecto es "/tmp". Para asociar este archivo al navegador del cliente, un identificador es enviado a la página que inicia una session_start(), si ninguna cookie ya ha sido definida. Cada vez que se peticiona una nueva página del sitio la cookie es devuelta al servidor, que identificará la sesión y cargará $_SESSION.
El nombre de esta cookie también está definida en el archivo php.ini. El nombre de la sesión es session.name y su valor por defecto es PHPSESSID.

El principio de la fusión


Como habrás podido observar, el sitio Web solo identifica una sesión con el valor de la cookie pasada por el cliente. Si dos navegadores Web presentan la misma cookie de sesión, entonces estos dos navegadores compartirán una tabla $_SESSION[].

Para esto, es necesario que el usuario que inicializo la sesión en primer lugar, dé su identificador de sesión a las personas que deseen conectarse. Por lo tanto, es necesario prever la visualización de la valor del la cookie de sesión.

La persona que desee conectarse deberá utilizar un formulario específico, en el que ingresara el valor de la sesión. Durante el procesamiento del formulario, se enviará este valor en una cookie de sesión que nosotros mismos habremos creado.

Luego, los dos navegadores tendrán una sesión común.

Código PHP

Nombre de la cookie de sesión


El nombre de la cookie de sesión se obtiene mediante la instrucción ini_get('session.name').

Envio de la cookie "home made"


El envío de la cookie se hace mediante la instrucción setcookie(ini_get('session.name'),'valor');

Lectura de la valor de la cookie de sesión


La lectura del valor de la cookie de sesión se hace mediante la variable $_COOKIE[ini_get('session.name')]

Apertura de sesión tradicional


<?php 
session_start(); 
echo "php: ".ini_get('session.name').'<br />'; 
if (isset($_COOKIE[ini_get('session.name')])) 
{ 
 echo "cookie: ".$_COOKIE[ini_get('session.name')]; 
 $_SESSION['test']="OK!"; 
} 
else 
 header('Location: login.php'); 
?>

Formulario de fusión


<?php 
if (isset($_GET['cookie']))        //si el formulario ha sido rellenado 
{ 
    //generación de la cookie de sesión 
    setcookie(ini_get('session.name'),$_GET['cookie']);     
    //página de validación 
    echo '<html><body><a href="validation.php">validation ' 
            .$_GET['cookie'].'</a></body></html>'; 
} 
else 
{ 
    //formulario de fusión 
    echo '<html><body><form action=""> 
            <input name="cookie"/><input type="submit" /> 
            </form></body></html>'; 
} 
?>

Validation.php


<?php 
session_start(); 
echo "cookie: ".$_COOKIE[ini_get('session.name')]."<br/>"; 
echo "test: "; 
if (isset($_SESSION['test']))    //si la variable de sesión existe 
   echo $_SESSION['test'];        //se muestra 
else                            //sinon 
   echo "NO ES CORECTO";                //se planta
?>

Prueba


Ahora, puedes crear 3 archivos en la misma carpeta. El nombre del 3er archivo es el definido en el enlace del 2do (validation.php)
Ejecuta el primer archivo, copia el valor de la variable de sesión.
En otro navegador (no en otra ventana), abre el 2do archivo. Pega el valor de la variable de sesión en el formulario, y valida.
La 3ra página te muestra en el segundo navegador el valor que había sido definido en el primer navegador!
Si repites la prueba especificando un valor erróneo, la variable no aparece.

Inconvenientes


Algunos sitios Web guardan en la sesión ciertos valores del usuario en el sitio web. Este uso de las variables de sesión puede ser problemático

Ventajas


Es posible interrumpir la sesión en un PC, y retomarla exactamente donde estabas, en otro navegador, sin tener que utilizar una base de datos.
Por ejemplo, en una tienda en línea, varios usuarios pueden utilizar una sesta colectiva.

Consulta también :
El documento «Fusión de sesiones en PHP» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.