Версия фреймворка: 5.4 4.2 4.1

Сессии

Настройка

Протокол 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 (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 обычно используется для юнит-тестов, так как он на самом деле не сохраняет данные для последующих запросов.