Skip to main content

¿Qué es la sesión?

HTTP es un protocolo sin estado. Es decir, HTTP en sí mismo no tiene un mecanismo para mantener información de un usuario entre solicitudes. La funcionalidad de sesión de Laravel ofrece un modo de conservar datos del usuario a lo largo de varias solicitudes. Guarda en la sesión información que quieras mantener entre solicitudes: estado de inicio de sesión, productos del carrito, datos de un formulario en curso, etc.

Configuración del driver de sesión

La configuración se encuentra en config/session.php. Puedes cambiar el driver con la variable de entorno SESSION_DRIVER (en .env).
Los drivers que Laravel soporta de serie son:
En un proyecto por defecto de Laravel, el driver configurado es database. Para usar este driver hace falta la tabla sessions, pero ya está incluida en la migración por defecto, así que funciona sin ajustes.

Serialización de la sesión

En el esqueleto de aplicación de Laravel 13, config/session.php define serialization como json. El valor por defecto interno del framework sigue siendo php.
Cambiar este valor de php a json invalida todas las sesiones de usuario activas. También puede provocar errores si la sesión almacena objetos PHP.
Para mantener las sesiones activas durante la actualización, define explícitamente php. Si tu aplicación no almacena objetos PHP en la sesión y no te importa pedir a los usuarios que vuelvan a iniciar sesión, puedes usar json para obtener mejor seguridad.

Formas de acceder a la sesión

Hay dos formas de acceder: usando métodos de la instancia Request o usando el helper global session().

Usando la instancia Request

Recibe Request como type-hint en el método del controlador y accede con $request->session().

Usando el helper global session()

El helper session() puede invocarse desde cualquier sitio: controladores, vistas, etc.
En pruebas puedes verificar con assertSessionHas en ambos casos. Dentro de un controlador, usar $request->session() deja explícita la dependencia y resulta más claro.

Operaciones sobre la sesión

Obtener datos

Comprobar la existencia

Presta atención a la diferencia entre has y exists:

Guardar datos

Eliminar datos

Datos flash

Los datos flash son datos de sesión válidos solo en la siguiente solicitud. Se usan para información que solo hay que mostrar una vez, como mensajes de éxito o error tras enviar un formulario.

Guardar con flash()

Los datos pueden leerse en la siguiente solicitud, tras la cual se eliminan automáticamente.

Extender datos flash

Mostrar mensajes flash en Blade

Escribir la visualización del mensaje flash en el layout (por ejemplo layouts/app.blade.php) permite mostrarlo de forma consistente en todas las páginas.

Caso práctico: mostrar mensaje tras enviar un formulario

Guardar un mensaje de éxito en la sesión, hacer un redirect y mostrarlo en la siguiente página es un patrón clásico.
1

Definir las rutas

2

Implementar el controlador

En el store que recibe el formulario, tras guardar redirige con un mensaje de éxito.
redirect()->with('success', '...') es un atajo para pasar datos flash al destino de la redirección.
3

Mostrar el mensaje en el layout

Añade la visualización del mensaje flash en resources/views/layouts/app.blade.php.
4

Crear la vista del listado

Al guardar el post y redirigir, en la parte superior del listado se mostrará una vez el mensaje “Post creado.”.

Patrón combinado con errores de validación

En caso de fallo de validación se combina con back()->withErrors(). Laravel guarda automáticamente los errores como datos flash, así que en Blade puedes usar la variable $errors.
flush() elimina todos los datos de la sesión, incluido el estado de autenticación. Si solo quieres eliminar datos específicos, usa forget() indicando la clave.

Próximos pasos

Validación

Aprende a validar los datos introducidos en un formulario.
Última modificación el 21 de agosto de 2026