Сессии
11.x
.
Почему это важно?
Настройка
Протокол HTTP не имеет средств для хранения своего состояния. Сессии – способ сохранения информации (например, ID залогиненного пользователя) между отдельными HTTP-запросами. Laravel поставляется со множеством различных механизмов сессий, доступных через единое API. Изначально существует поддержка таких систем, как Memcached, Redis и СУБД.
Настройки сессии содержатся в файле app/config/session.php
. Обязательно просмотрите параметры, доступные вам – они хорошо документированы. По умолчанию Laravel использует драйвер native
, который подходит для большинства приложений.
Зарезервированные ключи
Не используйте в качестве ключа переменной flash
– этот клюс зарезервирован Laravel для внутренних нужд.
Использование сессий
Сохранение переменной в сессии
Session::put('key', 'value');
Добавление элемента к переменной-массиву
Session::push('user.teams', 'developers');
Чтение переменной сессии
$value = Session::get('key');
Чтение переменной со значением по умолчанию
$value = Session::get('key', 'default');
$value = Session::get('key', function() { return 'дефолтное значение'; });
Получение всех переменных сессии
$data = Session::all();
Проверка существования переменой
if (Session::has('users'))
{
//
}
Удаление переменной из сессии
Session::forget('key');
Удаление всех переменных
Session::flush();
Присвоение сессии нового идентификатора
Session::regenerate();
Одноразовые flash-данные
Иногда вам нужно сохранить переменную только для следующего запроса – а дальше она должна быть автоматически удалена. Это нужно, например, для передачи ошибок валидации в форму. Вы можете сделать это методом Session::flash
:
Session::flash('key', 'value');
Продление всех одноразовых переменных ещё на один запрос
Session::reflash();
Продление только отдельных переменных
Session::keep(array('username', 'email'));
Сессии в базах данных
При использовании драйвера database
вам нужно создать таблицу, которая будет содержать данные сессий. Ниже – пример такого объявления с помощью конструктора таблиц (Schema
):
Schema::create('sessions', function($table)
{
$table->string('id')->unique();
$table->text('payload');
$table->integer('last_activity');
});
Либо вы можете использовать команду session:table
Artisan для создания этой миграции:
php artisan session:table
composer dump-autoload
php artisan migrate
Драйверы
“Драйвер” определяет, где будут храниться данные для каждой сессии. Laravel поставляется с целым набором замечательных драйверов:
native
– использует встроенные средства PHP для работы с сессиями.cookie
– данные хранятся в виде зашифрованных cookies.database
– хранение данных в БД, используемой приложением.memcached
иredis
– используются быстрые кэширующие хранилища пар ключ/значение – memcached или redis.array
– данные содержатся в виде простых массивов PHP и не будут сохраняться между запросами.
Примечание: драйвер
array
обычно используется для юнит-тестов, так как он на самом деле не сохраняет данные для последующих запросов.