Тайм-аут сеанса приложения Laravel из пользовательской таблицы - PullRequest
0 голосов
/ 30 октября 2019

Я бы хотел переопределить значение сеанса приложения Laravel по умолчанию в файле config/session.php.

Это должно работать для основ пользователя. Например,

Если пользователь Сэм установил время сеанса на 10 минут в настройках своего профиля пользователя, сеанс приложения действителен только 10 минут, когда он неактивен более 10 минут, тогда ему нужно запросить логиночередной раз.

В таблице «Пользователь» хранится предпочтительное время сеанса пользователя в одном столбце «1010», так что мое приложение только в идеальном состоянии, в котором пользователь предпочитает только время сеанса. Есть ли возможность переопределить время ожидания сеанса по умолчанию?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вы должны изменить переменную laravel env на лету

$userSessionTimout=$users['session_timeout']; 

config(['session.lifetime' => $userSessionTimout]);
0 голосов
/ 30 октября 2019

В зависимости от того, как вы настроили вашу аутентификацию, 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
        ]);
    });
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...