Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.

Сессии

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