Session Component
Компонент triangle/session предоставляет управление сессиями пользователей.
Установка
composer require triangle/session
Конфигурация
Настройки в config/session.php:
return [
'driver' => 'file', // file, redis, mongodb
'lifetime' => 7200, // 2 часа (в секундах)
'path' => runtime_path('sessions'),
'cookie' => [
'name' => 'triangle_session',
'path' => '/',
'domain' => null,
'secure' => false,
'http_only' => true,
],
];
Драйверы
File (по умолчанию)
Сессии хранятся в файлах:
'driver' => 'file',
'path' => runtime_path('sessions'),
Redis
Для использования Redis установите расширение:
# Ubuntu/Debian
sudo apt-get install php-redis
# Или через PECL
pecl install redis
Конфигурация:
'driver' => 'redis',
'connection' => 'default', // подключение из config/redis.php
MongoDB
Для использования MongoDB установите:
composer require mongodb/mongodb
Конфигурация:
'driver' => 'mongodb',
'connection' => 'mongodb://localhost:27017',
'database' => 'sessions',
'collection' => 'sessions',
Использование
В контроллере
<?php
namespace App\Controller;
use Triangle\Engine\Request;
class UserController
{
public function login(Request $request)
{
// Установка значения
$request->session()->set('user_id', 123);
$request->session()->set('user_name', 'John');
return response()->json(['success' => true]);
}
public function profile(Request $request)
{
// Получение значения
$userId = $request->session()->get('user_id');
// Получение с значением по умолчанию
$userName = $request->session()->get('user_name', 'Guest');
// Получение всех значений
$all = $request->session()->all();
return response()->json([
'user_id' => $userId,
'user_name' => $userName,
]);
}
public function logout(Request $request)
{
// Удаление значения
$request->session()->delete('user_id');
// Очистка всей сессии
$request->session()->flush();
// Уничтожение сессии
$request->session()->destroy();
return response()->json(['success' => true]);
}
}
Вспомогательные функции
// Получение значения сессии
session('key');
// Установка значения
session(['key' => 'value']);
// Удаление значения
session()->delete('key');
// Проверка существования
if (session()->has('key')) {
// ...
}
Flash-сообщения
Flash-сообщения доступны только для одного запроса:
// Установка flash-сообщения
$request->session()->flash('message', 'Success!');
// Получение flash-сообщения
$message = $request->session()->get('message');
// Flash-сообщение автоматически удаляется после прочтения
Безопасность
Защита от фиксации сессии
// Регенерация ID сессии
$request->session()->regenerate();
// Регенерация с удалением старой сессии
$request->session()->regenerate(true);
Ограничение времени жизни
// Установка времени жизни для конкретного ключа
$request->session()->set('key', 'value', 3600); // 1 час