SESIONES
1. Configuración Inicial
Las sesiones en Laravel vienen configuradas por defecto. El archivo principal de configuración está en:
config/session.php2. Drivers Disponibles
Laravel soporta varios drivers de sesión:
// 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 testing3. Configurar Base de Datos (Opcional)
Si quieres usar la base de datos como driver:
# Crear la tabla de sesiones
php artisan session:table
# Ejecutar migración
php artisan migrate4. Uso Básico de Sesiones
Almacenar datos:
// 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:
$valor = session('clave');
$valor = session('clave', 'valor_por_defecto');
// Usando la facade
$nombre = Session::get('nombre');
$todos = Session::all();Verificar existencia:
if (session()->has('user_id')) {
// La clave existe
}
if (Session::exists('user_id')) {
// La clave existe
}5. Métodos Útiles
// 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
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session()->has('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif7. Middleware de Sesión
Las rutas web ya incluyen el middleware de sesión automáticamente. Para APIs, puedes agregarlo manualmente:
Route::middleware('web')->group(function () {
Route::get('/perfil', function () {
// Tu código aquí
});
});8. Configuración de Cookies
En config/session.php puedes configurar:
'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
// 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:
// En AppServiceProvider
public function boot()
{
Session::extend('custom', function ($app) {
// Retorna una implementación de SessionHandlerInterface
return new CustomSessionHandler;
});
}Consideraciones Importantes:
Seguridad: Laravel encripta las sesiones por defecto
Performance: Para alta concurrencia, usa
redisomemcachedStorage: El driver
fileguarda enstorage/framework/sessionsLifetime: Configura el tiempo de expiración según tus necesidades
Comentarios
Publicar un comentario