Session

Intermedio
Laravel
Laravel
Actualizado: 24/09/2025

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.