Configuración de Session Laravel y formas de acceder al sistema

Las variables “session” Lavarel se utilizan para guardar datos que se mantengan durante la sesión activa de la visita al sitio Web y gracias a ellas el servidor puede relacionar una request con otra y retener datos a lo largo de ella.

Al contrario que otras variables como las cookies, las “session” desaparecen cuando pasa un tiempo y no hay nuevas solicitudes por el navegador, aunque esto, podría sernos útil para, por ejemplo, guardar los productos de un carrito de la compra que no han sido gestionados por el usuario y recordárselo en su correo. Si bien PHP puede gestionar este tipo de variables de forma nativa, Laravel dispone de otros métodos de configuración con más posibilidades.

Configuración

En el archivo config/session.php realizaremos la configuración donde se almacenarán las sesiones y el tiempo de cada una, contando con cuatro opciones principales:

File

La ruta donde se almacenarán las variables será: storage/framework/sessions.

Cookies

Almacenaremos las variables de sesión sobre cookies encriptadas.

Database

Implementaremos las sesiones en una base de datos.

Memcached / redis

Con esto podremos utilizar un sistema de caché de memoria que hará el proceso más rápido.

Formas para acceder al sistema de sesión de Laravel

Con Lavarel, disponemos de diversas operativas administrativas, como abrir la sesión al efectuar una solicitud, pudiendo así, emplear las variables de sesión en cualquier momento. Existen dos alternativas:

Helper global session

Con esta forma podemos acceder al API y llegar a la sesión desde cualquier parte del código y es una manera sencilla de tener acceso a los datos de la sesión, modificarlos, etc.

Podríamos acceder a una sesión que hemos llamado «idCarroCompra» de esta forma:

$identificador_carrito = session('idCarroCompra');

Instancia de Request

Laravel dispone del objeto $request, y que podemos acceder también al API de las sesiones. Con la request, obtenemos una variable de sesión «idCarroCompra» de esta manera:

public function index(Request $request) {
$identificador_carrito = $request->session()->get('idCarroCompra');
//  Aquí tu código...
}

Creación y recuperación de una variable sesión con Laravel

Guardar una variable de sesión

Deberemos indicarle en un array asociativo las variables de sesión que queremos guardar. El array dispone pares clave/valor, siendo “clave” el nombre de la variable y “valor” el valor de ésta.

session(['idCarroCompra' => '15320']);

Rescatando la variable sesión

Podremos recuperar de forma fácil el dato almacenado en la sesión, indicando el nombre de la variable a la que queremos acceder.

$valor_almacenado = session('idCarroCompra');

Objeto session

Con el objeto “session” dispondremos de acceso a varios métodos de utilidad. Podemos ejecutarlo con el helper global como mostramos a continuación.

session()

En muchas ocasiones este objeto se utiliza sin tener que guardarlo en ninguna variable y unido solo al método que queramos ejecutar.

Eliminando una variable de sesión

Utilizaremos el método forget(), de este modo:

session()->forget('orderId');

Verificar que una variable de sesión existe

Usaremos para ello el método has().

session()->has('paymentIntentId');

Regenerar el identificador de sesión

El identificador permite identificar una sesión de un usuario en la página y aunque este se mantiene a lo largo de toda su visita, cuando un usuario accede a la zona de logueo, el identificador se vuelve a regenerar. Si en algún momento necesitamos regenerarlo de forma manual, utilizaremos el método regenerate().

session()->regenerate();

Eliminar los datos de sesión al hacer logout

Se supone que al desconectarnos (logout) los datos de nuestra sesión deberían de eliminarse, pero Laravel no cuenta con este comportamiento de manera predeterminada, por lo que podríamos utilizar un manejador de evento para «Logout». Lo declaramos en el fichero app/Providers/EventServiceProvider.php mediante el array $listeners.

protected $listen = [
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\DeleteSessionData',
],
];

En el código le decimos que cuando ejecutemos el evento «Logout», se invoque el manejador DeleteSessionData. Con el comando “artisan” podríamos generar el manejador y que deberemos de ejecutarlos una vez editado el archivo EventServiceProvider.php.

php artisan event:generate

La clase DeleteSessionData, una vez realizados los pasos indicados, tendría un código como este:

<?php
namespace App\Listeners;
use Illuminate\Auth\Events\Logout;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Lib\StripeHelper;
class DeleteSessionData
{
public function __construct()
{
//
}
public function handle(Logout $event)
{
session()->forget('variable_de_sesion_que_quieres_asegurarte_de_borrar');
}
}