git 4deba2bfca6636d5cdcede3f2068eff3b59c15ce
Протокол HTTP не имеет средств для фиксации своего состояния. Сессии - способ сохранения информации (например, ID залогиненного пользователя) между отдельными HTTP-запросами. Laravel поставляется со множеством различных механизмов сессий, доступных через единое API. Изначально существует поддержка таких систем, как Memcached, Redis и СУБД.
Настройки сессии содержатся в файле config/session.php
. Обязательно просмотрите параметры, доступные вам - они хорошо документированы. По умолчанию Laravel использует драйвер native
, который подходит для большинства приложений.
Прежде чем использовать Redis, необходимо установить пакет predis/predis
версии ~1.0
через Composer.
Примечание: Если вы хотите, что бы все данные, хранящиеся в сессиях, были зашифрованы, установите параметр
encrypt
в значениеtrue
в настройках.
Laravel использует имя ключа flash
для внутренних целей, поэтому вы не дожны добавлять в сессию данные с таким ключом.
Session::put('key', 'value');
Session::push('user.teams', 'developers');
$value = Session::get('key');
$value = Session::get('key', 'default');
$value = Session::get('key', function() { return 'дефолтное значение'; });
$value = Session::pull('key', 'дефолтное значение');
$data = Session::all();
if (Session::has('users'))
{
//
}
Session::forget('key');
Session::flush();
Session::regenerate();
Иногда вам нужно сохранить переменную только для следующего запроса, после выполнения которого она должна быть автоматически удалена. Это нужно, например, для передачи ошибок валидации в форму. Вы можете сделать это методом Session::flash
(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');
});
Либо вы можете использовать Artisan-команду session:table
для создания этой миграции:
php artisan session:table
composer dump-autoload
php artisan migrate
"Драйвер" определяет, где будут храниться данные для каждой сессии. Laravel поставляется с целым набором замечательных драйверов:
native
- использует встроенные средства PHP для работы с сессиями.cookie
- данные хранятся в виде зашифрованных cookies.database
- хранение данных в БД, используемой приложением.memcached
иredis
- используются быстрые кэширующие хранилища пар ключ/значение - memcached или redis.array
- данные содержатся в виде простых массивов PHP и не будут сохраняться между запросами.
Примечание: драйвер
array
обычно используется для юнит-тестов, так как он на самом деле не сохраняет данные для последующих запросов.