Есть ли способ, чтобы установить сеансы истечения через определенное время. Моя текущая установка, кажется, истекает через 30 минут, и я хотел бы отключить ее или хотя бы увеличить ее, но я не могу найти места в Laravel, где это можно было бы установить?
Как установить тайм-аут сеанса в Laravel 4.2?
Ответ 1
Проверьте php.ini, он имеет значение session.gc_maxlifetime (а также session.cookie_lifetime), который устанавливает ограничение на то, как долго PHP будет продолжать сеансы. Когда Laravel устанавливает параметры, он передает cookie_lifetime
как значение, установленное в app/config/session.php
.
Однако сеансы не истекли сразу после достижения максимального времени жизни. Что происходит, после того, как этот промежуток времени прошел сеанс, тогда его можно удалить сборщиком мусора.
Чтобы решить проблему
Один способ обхода - проверить файл php.ini
. Вы можете определить эту переменную: session.gc_maxlifetime
. По умолчанию установлено значение 1440. Просто прокомментируйте или удалите его.
С этого момента ваш сеанс может корректно работать с вашими значениями конфигурации session.php.
Ответ 2
В app/config/session.php
у вас есть:
lifetime
который позволяет установить время окончания сеанса в минутах (не в секундах)
'lifetime' => 60,
означает, что сеанс истечет через час.
Здесь также есть еще одна настройка:
'expire_on_close' => true,
который решает, будет ли срок действия сеанса истек, когда браузер будет закрыт.
Другие настройки, которые могут вас заинтересовать, также php.ini
значения:
session.cookie_lifetime = 0
и
session.gc_maxlifetime = 1440
Это значения по умолчанию.
Первый означает, как будет храниться длительный сеанс cookie - значение по умолчанию равно 0 (пока просмотр не будет закрыт). Второй вариант означает, что количество секунд PHP может уничтожить данные сеанса.
Я сказал, может быть, потому что есть еще один вариант session.gc_probability
в файле php.ini
, который решает, какую вероятность запускать сборщик мусора. По умолчанию существует только 1% вероятность того, что после 1440 секунд (24 минуты) данные сеанса будут уничтожены.
Ответ 3
Поддержка родной поддержки PHP была отброшена, начиная с Laravel 4.1
Чтобы настроить редактирование времени сеанса app/config/session.php
и установите следующее:
/* if this is set to 'native' it will use file.
if this is set to 'array' sessions will not persist across requests
effectively expiring them immediately.
*/
'driver' => 'file'
/* number of minutes after which the session is available for Laravel's
built in garbage collection.
Prior to 4.1 you could set this to zero to expire sessions when
the browser closes. See the next option below.
*/
'lifetime' => 60
/* If true sessions will expire when the user closes the browser.
This effectively ignores your lifetime setting above.
Set to false if you want Laravel to respect the lifetime value.
If your config file was written before 4.1 you need to add this.
*/
'expire_on_close' => false,
Литература:
- Обсуждение того, почему родные сессии PHP были отброшены. (поскольку он автоматически добавляет информацию о файлах cookie в заголовки, что требует много работы для фреймворков, чтобы обойти их, если они хотят полностью обернуть запрос/ответ).
- Другие драйверы сеанса Laravel
- Добавление опции expire_on_close config, описанной в руководстве по обновлению Laravel 4.0 до 4.1
Запустите artisan changes 4.1.*
в командной строке, чтобы увидеть примечание о сценарии сеанса native
, эквивалентном file
$ artisan changes 4.1.* | grep -i native
-> Native session driver has been replaced by 'file'. Specifying 'native' driver will just use the new file driver.
Ответ 4
App\Config\Session.php
проверить на время жизни...
вы также можете установить...
Cookie::make('name', 'value', 60); // 1 hr