SESIONES

1. Configuración Inicial

Las sesiones en Laravel vienen configuradas por defecto. El archivo principal de configuración está en:

bash
config/session.php

2. Drivers Disponibles

Laravel soporta varios drivers de sesión:

php
// config/session.php
'driver' => env('SESSION_DRIVER', 'file'),

// Opciones disponibles:
// 'file' - Archivos (default)
// 'cookie' - Cookies encriptadas
// 'database' - Base de datos
// 'memcached' / 'redis' - Cache en memoria
// 'array' - Para testing

3. Configurar Base de Datos (Opcional)

Si quieres usar la base de datos como driver:

bash
# Crear la tabla de sesiones
php artisan session:table

# Ejecutar migración
php artisan migrate

4. Uso Básico de Sesiones

Almacenar datos:

php
// Usando el helper session()
session(['clave' => 'valor']);
session(['user_id' => 1]);

// Usando la facade
use Illuminate\Support\Facades\Session;

Session::put('nombre', 'Juan');
Session::put(['edad' => 25, 'ciudad' => 'Madrid']);

Recuperar datos:

php
$valor = session('clave');
$valor = session('clave', 'valor_por_defecto');

// Usando la facade
$nombre = Session::get('nombre');
$todos = Session::all();

Verificar existencia:

php
if (session()->has('user_id')) {
    // La clave existe
}

if (Session::exists('user_id')) {
    // La clave existe
}

5. Métodos Útiles

php
// Guardar datos temporales (solo para la próxima request)
Session::flash('mensaje', 'Operación exitosa!');

// Mantener flash data por una request más
Session::reflash();

// Eliminar datos
Session::forget('clave');
session()->forget('clave');

Session::pull('clave'); // Obtiene y elimina

// Limpiar toda la sesión
Session::flush();

6. Sesiones en Blade

blade
@if(session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif

@if(session()->has('error'))
    <div class="alert alert-danger">
        {{ session('error') }}
    </div>
@endif

7. Middleware de Sesión

Las rutas web ya incluyen el middleware de sesión automáticamente. Para APIs, puedes agregarlo manualmente:

php
Route::middleware('web')->group(function () {
    Route::get('/perfil', function () {
        // Tu código aquí
    });
});

8. Configuración de Cookies

En config/session.php puedes configurar:

php
'lifetime' => 120, // minutos de vida de la sesión
'expire_on_close' => false,
'encrypt' => false,
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE', false),
'http_only' => true,
'same_site' => 'lax',

9. Ejemplo Práctico Completo

php
// En un controlador
public function login(Request $request)
{
    // Validación
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    if (Auth::attempt($credentials)) {
        // Guardar datos en sesión
        session([
            'user_id' => Auth::id(),
            'user_name' => Auth::user()->name,
            'last_login' => now()
        ]);

        return redirect('/dashboard')
            ->with('success', 'Login exitoso!');
    }

    return back()->with('error', 'Credenciales incorrectas');
}

public function logout()
{
    Auth::logout();
    session()->flush(); // Limpiar toda la sesión
    
    return redirect('/')
        ->with('info', 'Sesión cerrada correctamente');
}

10. Personalización (Opcional)

Puedes crear tu propio driver de sesión extendiendo la clase SessionManager:

php
// En AppServiceProvider
public function boot()
{
    Session::extend('custom', function ($app) {
        // Retorna una implementación de SessionHandlerInterface
        return new CustomSessionHandler;
    });
}

Consideraciones Importantes:

  1. Seguridad: Laravel encripta las sesiones por defecto

  2. Performance: Para alta concurrencia, usa redis o memcached

  3. Storage: El driver file guarda en storage/framework/sessions

  4. Lifetime: Configura el tiempo de expiración según tus necesidades

Comentarios

Entradas más populares de este blog

Cómo usar php artisan ui:auth en Laravel

Te explico cómo configurar el sistema de login en Laravel paso a paso

Tutorial para instalar y usar Laravel Assets