PHP - Sesiones

Una forma alternativa de hacer que los datos sean accesibles en las distintas páginas de un sitio web completo es usar una sesión PHP.

Una sesión crea un archivo en un directorio temporal en el servidor donde se almacenan las variables de sesión registradas y sus valores. Estos datos estarán disponibles para todas las páginas del sitio durante esa visita.

La ubicación del archivo temporal está determinada por un ajuste en el php.ini archivo llamado session.save_path. Antes de usar cualquier variable de sesión, asegúrese de haber configurado esta ruta.

Cuando se inicia una sesión, suceden las siguientes cosas:

  • PHP primero crea un identificador único para esa sesión en particular, que es una cadena aleatoria de 32 números hexadecimales como 3c7foj34c3jj973hjkop2fc937e3443.

  • Una galleta llamada PHPSESSID se envía automáticamente a la computadora del usuario para almacenar una cadena de identificación de sesión única.

  • Se crea automáticamente un archivo en el servidor en el directorio temporal designado y lleva el nombre del identificador único prefijado por sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.

Cuando un script PHP quiere recuperar el valor de una variable de sesión, PHP automáticamente obtiene la cadena de identificación de sesión única de la cookie PHPSESSID y luego busca en su directorio temporal el archivo que lleva ese nombre y se puede realizar una validación comparando ambos valores.

Una sesión termina cuando el usuario pierde el navegador o después de salir del sitio, el servidor terminará la sesión después de un período de tiempo predeterminado, comúnmente de 30 minutos de duración.

Iniciar una sesión PHP

Una sesión de PHP se inicia fácilmente haciendo una llamada al session_start()Esta función primero verifica si una sesión ya se inició y si no se inició ninguna, entonces inicia una. Se recomienda poner la llamada asession_start() al principio de la página.

Las variables de sesión se almacenan en una matriz asociativa llamada $_SESSION[]. Se puede acceder a estas variables durante la vida útil de una sesión.

El siguiente ejemplo inicia una sesión y luego registra una variable llamada counter que se incrementa cada vez que se visita la página durante la sesión.

Hacer uso de isset() función para comprobar si la variable de sesión ya está configurada o no.

Coloque este código en un archivo test.php y cargue este archivo muchas veces para ver el resultado:

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

Producirá el siguiente resultado:

You have visited this page 1in this session.

Destruir una sesión PHP

Una sesión de PHP puede ser destruida por session_destroy()función. Esta función no necesita ningún argumento y una sola llamada puede destruir todas las variables de sesión. Si desea destruir una sola variable de sesión, puede usarunset() función para desarmar una variable de sesión.

Aquí está el ejemplo para desarmar una sola variable:

<?php
   unset($_SESSION['counter']);
?>

Aquí está la llamada que destruirá todas las variables de sesión:

<?php
   session_destroy();
?>

Activar sesión automática

No necesita llamar a la función start_session () para iniciar una sesión cuando un usuario visita su sitio si puede configurar session.auto_start variable a 1 en php.ini archivo.

Sesiones sin cookies

Puede haber un caso en el que un usuario no permita almacenar cookies en su máquina. Entonces, hay otro método para enviar la identificación de la sesión al navegador.

Alternativamente, puede utilizar el SID constante que se define si se inició la sesión. Si el cliente no envió una cookie de sesión adecuada, tiene el formato session_name = session_id. De lo contrario, se expande a una cadena vacía. Por lo tanto, puede incrustarlo incondicionalmente en URL.

El siguiente ejemplo demuestra cómo registrar una variable y cómo vincular correctamente a otra página utilizando SID.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Producirá el siguiente resultado:

You have visited this page 1in this session.
To continue click following link

los htmlspecialchars() se puede utilizar al imprimir el SID para prevenir ataques relacionados con XSS.