В зависимости от того, как вы настроили вашу аутентификацию, session.lifetime
фактически не является продолжительностью сеанса входа в систему. Это минимальная продолжительность всех данных, которые вы сохраняете в сеансе (например, с использованием session()->put('somekey', 'somedata')
).
Таким образом, вы все равно можете войти в систему, используя параметр remember me
, который создает файл cookie remember_web_d01f58ea4edcf9430959ba362b50f014c72a889d
, но допри входе в систему у вас уже есть файл cookie laravel_session
(или {APP_NAME}_session
). В этом случае удаление файла cookie laravel_session
приводит только к сбросу сеанса, но вы останетесь в системе из-за файла cookie remember_web_...
.
Так что, учитывая это, вы, возможно, захотите пересмотреть свое решение.
Если вы все еще хотите изменить время жизни сеанса, вы можете попробовать что-то вроде этого. Обратите внимание, что я не проверял это, и вы, скорее всего, столкнетесь с проблемами .
Этот код (без $this->app->booted()
), возможно, даже нужно переместить на Middleware
, чтобы ваш Auth::user()
обязательно был загружен, и даже тогда мне интересно, действительно ли это приведет к истечению или расширению сеанса из-за того, где это происходит в жизненном цикле Laravel.
ПРИМЕЧАНИЕ: удаление сеансовоснованный на лотерее сбора мусора, которая в основном означает, что 2 из 100 запросов сеансы будут собирать мусор. Смотрите конфигурацию session.lottery
. Так что сессия с истекшим сроком действия может не сразу истечь из-за этой лотереи.
// Providers/AppServiceProvider.php
public function boot() {
$this->app->booted(function() {
config([
// Override session lifetime with data from user record.
'session.lifetime' => Auth::user()->session_lifetime
]);
});
}
}