banner-uso-sesiones-en-laravel

Una sesión es la conexión que se establece entre un usuario (el equipo cliente) y un servidor Web, así las variables de sesión se utilizan para almacenar información de forma temporal en dicha conexión, es decir funcionan como un mecanismo para almacenar datos e información sobre un usuario, un evento o cualquier cosa durante un periodo en nuestra aplicación. En este caso, Laravel nos provee de un conjunto de métodos para trabajar en la obtención y almacenamiento de las variables de sesión y en el tutorial de hoy vamos a conocer cómo trabajar con cada uno de ellos.

Para configurar las sesiones en un proyecto de Laravel nos dirigimos al archivo config/session.php, en el cual tenemos un conjunto de opciones con las que podemos trabajar y está bien documentado.

<?php

return [

    'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => 120,
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => null,
    'table' => 'sessions',
    'lottery' => [2, 100],
    'cookie' => 'laravel_session',
    'path' => '/',
    'domain' => null,
    'secure' => false,

];

Con la opción driver podemos configurar cómo los datos de las sesiones serán almacenadas en el proyecto. Laravel soporta por defecto los siguientes tipos:

  • file – las sesiones son guardadas en storage/framework/sessions.
  • cookie – las sesiones son almacenadas en cookies cifradas.
  • database – las sesiones son guardadas en una base de datos usada por la aplicación.
  • memcached / redis – las sesiones son almacenadas sessions en uno de estos almacenamientos en caché de datos.
  • array – las sesiones son guardadas en un simple array de PHP y no persistirán a través de las solicitudes. Este driver es usado cuando se ejecutan las pruebas automatizadas con PHPUnit para así prevenir que los datos de la sesión sean persistidos.

El driver que viene por defecto en Laravel es file, el cual funciona bien para la mayoría de las aplicaciones.

Otras opciones que se encuentran presentes en el archivo de configuración de sesiones es que podemos activar el cifrado de las variables de sesión colocando la opción encrypt igual a true. Así como también podemos establecer el tiempo de vida de una sesión y si queremos que expire cuando el navegador se cierre.

Uso

Para usar las sesiones en un proyecto de Laravel podemos hacerlo de varias maneras:

  • Por medio del método session() de la petición HTTP (Illuminate\Http\Request) que recibe el método de algún controlador. Ejemplo:
    public function showProfile(Request $request, $id)
    {
       $value = $request->session()->get('key');
       //
    }
  • Por medio de la Facade Session. Ejemplo:
    $value = Session::get('key');
  • Por medio del helper session(). Ejemplo:
    $value = session('key');

Obtener el valor de una variable de sesión

$value = $request->session()->get('key');

Ejemplo:

$value = $request->session()->get('mensaje');
$value = session(‘mensaje’); //usando el helper

Se puede pasar un segundo argumento al método get() que actuará como valor por defecto de dicha variable, el cual será devuelto en caso que la variable que se está llamando no exista en la sesión. Ejemplo:

$value = $request->session()->get(‘mensaje’, ‘No hay mensajes’);

Adicionalmente, se puede pasar como segundo argumento un Closure o función que se ejecutará cuando la variable no exista en la sesión y el valor será el resultado devuelto por la función. Ejemplo:

$value = $request->session()->get('mensaje', function() {
   return 'No hay mensajes';
});

Obtener todos los datos de una sesión

$data = $request->session()->all();
$data = Session::all(); //usando el Facade

Determinar si existe una variable en la sesión

Se utiliza el método has para confirmar si existe, el cual devolverá true en caso de existir. Ejemplo:

if ($request->session()->has('mensaje')) {
    echo $request->session()->get('mensaje'); // si existe imprime el valor de la variable mensaje
}

Almacenar datos en la sesión

$request->session()->put('key', 'value');

Ejemplo:

$request->session()->put('email', '[email protected]');
session(['email' => '[email protected]']); //usando el helper

Eliminar una variable de la sesión

$request->session()->forget('key');

Ejemplo:

$request->session()->forget('mensaje');

Para eliminar todas las variables de la sesión:

$request->session()->flush();
Session::flush(); //usando el Facade

Guardar valores de sesión en una variable tipo array

Con el método push() se puede guardar un nuevo valor en una variable de tipo array. Ejemplo:

$request->session()->push('user.teams', 'developers');

Regenerar el ID de la sesión

Es decir, que una nueva ID para la sesión será asignada.

$request->session()->regenerate();

Datos volátiles (Flash)

En caso de querer crear una variable de sesión solo para la siguiente petición HTTP se usa el método flash(), el cual nos permite guarda datos en la sesión hasta la siguiente petición y luego son eliminados. Esto es útil para enviar mensajes de corta vida. Como por ejemplo cuando se elimina un usuario en el sistema se puede crear:

$request->session()->flash('mensaje', '¡El usuario fue eliminado!');

Si se quiere mantener los datos guardados para las próximas peticiones se puede usar el método reflash() el cual mantiene todos los datos de sesión hasta la próxima petición. Pero si lo que quieres es mantener solo algunas de las variables puedes usar el método keep() pasando como parámetro las variables a guardar. Ejemplo:

$request->session()->reflash();

$request->session()->keep(['mensaje', 'email']);

 

¡Bien! espero que les sea de utilidad para sus proyectos de Laravel. Si quieres aprender de algún tema en especial puedes hacer la solicitud en http://teach.styde.net/. No dejes de comentar en caso de duda, además de compartir en las redes sociales.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Bootstrap Sass en Laravel con Elixir y Gulp Lección siguiente Bootstrap Sass en Laravel parte 2 (Bower)