Session

Intermedio
Laravel
Laravel
Actualizado: 27/03/2026

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 - Autor del tutorial

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.

Cursos que incluyen esta lección

Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje