Interacción con la Session
Las sesiones HTTP en Laravel proporcionan una forma elegante de almacenar información del usuario a través de múltiples peticiones. Al trabajar con controladores y aplicaciones web, la capacidad de mantener estado entre diferentes solicitudes HTTP es fundamental para crear experiencias de usuario fluidas.
Acceso a la Session desde Controladores
Laravel ofrece dos enfoques principales para interactuar con la session. El método más común es a través de la instancia Request
que se puede inyectar automáticamente en cualquier método de controlador:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class UserController extends Controller
{
public function store(Request $request): Response
{
// Obtener datos de la session
$userName = $request->session()->get('user_name');
// Almacenar datos en la session
$request->session()->put('last_action', 'create_user');
return response('Usuario creado correctamente');
}
}
La inyección de dependencias de Laravel se encarga automáticamente de proporcionar la instancia Request
correcta con acceso completo a la session actual del usuario.
Uso del Helper Global session()
Laravel también proporciona un helper global que simplifica las operaciones con sessions, especialmente útil en rutas y closures:
// En una ruta
Route::get('/profile', function () {
// Obtener un valor de la session
$theme = session('user_theme');
// Obtener con valor por defecto
$language = session('language', 'es');
// Almacenar datos en la session
session(['last_visit' => now()]);
return view('profile', compact('theme', 'language'));
});
Métodos Fundamentales para la Gestión de Session
Almacenar datos en la session se realiza mediante el método put()
o el helper con array:
// Usando el objeto Request
$request->session()->put('shopping_cart', [
'items' => ['producto1', 'producto2'],
'total' => 150.50
]);
// Usando el helper global
session([
'user_preferences' => [
'theme' => 'dark',
'notifications' => true
]
]);
Recuperar datos de la session permite acceder a información almacenada previamente:
public function checkout(Request $request)
{
// Obtener datos específicos
$cart = $request->session()->get('shopping_cart');
// Verificar si existe un valor en la session
if ($request->session()->has('user_id')) {
$userId = $request->session()->get('user_id');
// Procesar checkout para usuario autenticado
}
// Obtener con valor por defecto usando closure
$discount = $request->session()->get('discount', function () {
return $this->calculateDefaultDiscount();
});
}
Verificación de Existencia de Datos
Laravel proporciona varios métodos para comprobar la existencia de datos en la session:
public function dashboard(Request $request)
{
// Verificar si existe y no es null
if ($request->session()->has('user_role')) {
$role = $request->session()->get('user_role');
}
// Verificar si existe (incluso si es null)
if ($request->session()->exists('last_login')) {
$lastLogin = $request->session()->get('last_login');
}
// Verificar si NO existe
if ($request->session()->missing('admin_access')) {
return redirect('/unauthorized');
}
}
Recuperación de Múltiples Valores
Para trabajar con subconjuntos de datos de session, Laravel ofrece métodos especializados:
public function exportUserData(Request $request)
{
// Obtener solo campos específicos
$userData = $request->session()->only([
'user_name',
'user_email',
'user_preferences'
]);
// Obtener todos excepto campos específicos
$sessionData = $request->session()->except([
'csrf_token',
'internal_flags'
]);
// Obtener todos los datos de la session
$allData = $request->session()->all();
return response()->json($userData);
}
Operaciones con Arrays en Session
Laravel permite manipular arrays almacenados en la session de forma eficiente:
public function addToWishlist(Request $request)
{
// Añadir elemento a un array existente
$request->session()->push('wishlist', $request->input('product_id'));
// Si 'wishlist' no existe, se creará automáticamente
$request->session()->push('recent_searches', $request->input('query'));
}
Recuperación y Eliminación Simultánea
El método pull()
permite obtener y eliminar un valor en una sola operación:
public function processNotification(Request $request)
{
// Obtener el mensaje y eliminarlo de la session
$message = $request->session()->pull('flash_message', 'Sin mensajes');
// El valor ya no estará disponible en siguientes peticiones
return view('notification', compact('message'));
}
Integración con Middleware y Filtros
Las sessions se integran perfectamente con el sistema de middleware de Laravel:
class TrackUserActivity
{
public function handle(Request $request, Closure $next)
{
// Registrar actividad del usuario
$request->session()->put('last_activity', now());
// Incrementar contador de páginas vistas
$pageViews = $request->session()->get('page_views', 0);
$request->session()->put('page_views', $pageViews + 1);
return $next($request);
}
}
Esta flexibilidad en el acceso a las sessions hace que Laravel sea especialmente útil para desarrollar aplicaciones web que necesitan mantener estado del usuario, desde carritos de compra hasta preferencias personalizadas y sistemas de autenticación.
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en Laravel
Documentación oficial de Laravel
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Laravel es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Laravel
Explora más contenido relacionado con Laravel y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
- Comprender cómo acceder y manipular la sesión desde controladores mediante la inyección de la instancia Request.
- Utilizar el helper global session() para operaciones sencillas con la sesión.
- Aprender a almacenar, recuperar y verificar la existencia de datos en la sesión.
- Manejar subconjuntos de datos y operaciones con arrays dentro de la sesión.
- Integrar el uso de sesiones con middleware para mantener estado en la aplicación.