FlightPHP Сессия - Легковесный файловый обработчик сессий
Это легковесный, файловый плагин обработчика сессий для Flight PHP Framework. Он предоставляет простое, но мощное решение для управления сессиями с такими функциями, как неблокирующее чтение сессий, опциональное шифрование, функция автоматического коммита и тестовый режим для разработки. Данные сессии хранятся в файлах, что делает его идеальным для приложений, которые не требуют базу данных.
Если вы хотите использовать базу данных, ознакомьтесь с плагином ghostff/session, который имеет многие из этих функций, но с базой данных.
Посетите Github репозиторий для полного исходного кода и деталей.
Установка
Установите плагин через Composer:
composer require flightphp/session
Основное использование
Вот простой пример того, как использовать плагин flightphp/session
в вашем приложении Flight:
require 'vendor/autoload.php';
use flight\Session;
$app = Flight::app();
// Регистрация сервиса сессии
$app->register('session', Session::class);
// Пример маршрута с использованием сессии
Flight::route('/login', function() {
$session = Flight::session();
$session->set('user_id', 123);
$session->set('username', 'johndoe');
$session->set('is_admin', false);
echo $session->get('username'); // Вывод: johndoe
echo $session->get('preferences', 'default_theme'); // Вывод: default_theme
if ($session->get('user_id')) {
Flight::json(['message' => 'Пользователь вошел в систему!', 'user_id' => $session->get('user_id')]);
}
});
Flight::route('/logout', function() {
$session = Flight::session();
$session->clear(); // Очистить все данные сессии
Flight::json(['message' => 'Успешный выход']);
});
Flight::start();
Ключевые моменты
- Неблокирующий: По умолчанию использует
read_and_close
для начала сессии, предотвращая проблемы блокировки сессий. - Авто-коммит: Включен по умолчанию, поэтому изменения сохраняются автоматически при завершении работы, если не отключены.
- Файловое хранилище: Сессии хранятся в системном временном каталоге по умолчанию в
/flight_sessions
.
Конфигурация
Вы можете настроить обработчик сессий, передавая массив параметров при регистрации:
$app->register('session', Session::class, [
'save_path' => '/custom/path/to/sessions', // Каталог для файлов сессий
'encryption_key' => 'a-secure-32-byte-key-here', // Включить шифрование (рекомендуется 32 байта для AES-256-CBC)
'auto_commit' => false, // Отключить автоматический коммит для ручного управления
'start_session' => true, // Автоматически начинать сессию (по умолчанию: true)
'test_mode' => false // Включить тестовый режим для разработки
]);
Параметры конфигурации
Параметр | Описание | Значение по умолчанию |
---|---|---|
save_path |
Каталог, где хранятся файлы сессий | sys_get_temp_dir() . '/flight_sessions' |
encryption_key |
Ключ для шифрования AES-256-CBC (опционально) | null (без шифрования) |
auto_commit |
Автоматически сохранять данные сессии при завершении работы | true |
start_session |
Автоматически начинать сессию | true |
test_mode |
Запуск в тестовом режиме без влияния на PHP сессии | false |
test_session_id |
Пользовательский идентификатор сессии для тестового режима (опционально) | Генерируется случайно, если не установлен |
Расширенное использование
Ручной коммит
Если вы отключите авто-коммит, вы должны вручную коммитить изменения:
$app->register('session', Session::class, ['auto_commit' => false]);
Flight::route('/update', function() {
$session = Flight::session();
$session->set('key', 'value');
$session->commit(); // Явно сохранить изменения
});
Безопасность сессии с шифрованием
Включите шифрование для конфиденциальных данных:
$app->register('session', Session::class, [
'encryption_key' => 'your-32-byte-secret-key-here'
]);
Flight::route('/secure', function() {
$session = Flight::session();
$session->set('credit_card', '4111-1111-1111-1111'); // Шифруется автоматически
echo $session->get('credit_card'); // Дешифруется при получении
});
Регенация сессии
Регенерируйте идентификатор сессии для безопасности (например, после входа в систему):
Flight::route('/post-login', function() {
$session = Flight::session();
$session->regenerate(); // Новый ID, сохранить данные
// ИЛИ
$session->regenerate(true); // Новый ID, удалить старые данные
});
Пример промежуточного программного обеспечения
Защитите маршруты с помощью аутентификации на основе сессий:
Flight::route('/admin', function() {
Flight::json(['message' => 'Добро пожаловать в панель управления']);
})->addMiddleware(function() {
$session = Flight::session();
if (!$session->get('is_admin')) {
Flight::halt(403, 'Доступ запрещен');
}
});
Это просто простой пример того, как использовать это в промежуточном программном обеспечении. Для более глубокого примера ознакомьтесь с документацией о промежуточном программном обеспечении.
Методы
Класс Session
предоставляет эти методы:
set(string $key, $value)
: Сохраняет значение в сессии.get(string $key, $default = null)
: Извлекает значение с опциональным значением по умолчанию, если ключ не существует.delete(string $key)
: Удаляет конкретный ключ из сессии.clear()
: Удаляет все данные сессии.commit()
: Сохраняет текущие данные сессии в файловой системе.id()
: Возвращает текущий идентификатор сессии.regenerate(bool $deleteOld = false)
: Регенерирует идентификатор сессии, опционально удаляя старые данные.
Все методы, кроме get()
и id()
, возвращают экземпляр Session
для связывания.
Зачем использовать этот плагин?
- Легковесный: Нет внешних зависимостей — только файлы.
- Неблокирующий: Избегает блокировки сессий с помощью
read_and_close
по умолчанию. - Безопасный: Поддерживает шифрование AES-256-CBC для конфиденциальных данных.
- Гибкий: Авто-коммит, тестовый режим и параметры ручного управления.
- Нативный для Flight: Построен специально для фреймворка Flight.
Технические детали
- Формат хранения: Файлы сессий имеют префикс
sess_
и хранятся в настроенномsave_path
. Шифрованные данные используют префиксE
, открытые данные используютP
. - Шифрование: Использует AES-256-CBC с случайным IV для каждой записи сессии, когда предоставлен
encryption_key
. - Сбор мусора: Реализует
SessionHandlerInterface::gc()
PHP для очистки истекших сессий.
Участие
Вклад приветствуется! Сделайте форк репозитория, внесите изменения и отправьте пулл-запрос. Сообщайте об ошибках или предлагайте функции через трекер проблем GitHub.
Лицензия
Этот плагин лицензирован под MIT License. См. Github репозиторий для получения деталей.