Сессии

Настройка

Протокол 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();

Одноразовые 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');
});

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