セッションタイムアウトの設定は、/config/session.phpの’lifetime’に単位:分で設定する。
しかし、全ての登場人物がこの値を参照するので、登場人物ごとにlifetimeを用意しないといけない。
なので、管理画面用の’lifetime’を追加する。
/config/session.php
'lifetime_admin' => env('SESSION_LIFETIME_ADMIN', 120),
実際の値は、envファイルに設定する。
/.env
SESSION_LIFETIME_ADMIN=30
それぞれの値を参照するようにStartSession.phpに手を加える。
/vendor/laravel/framework/src/illuminate/Session/Middleware/StartSession.php
プライベート変数を用意。
protected $isAdmin;
アクセスされたのが管理画面側なのかを判定してプライベート変数にセットするため、以下を追加。
protected function handleStatefulRequest(Request $request, $session, Closure $next)
{
if ($request->is('admin/*')){ // 追加
$this->isAdmin = true; // 追加
}else{ // 追加
$this->isAdmin = false; // 追加
} // 追加
lifetimeの取得先を変更する為、以下のように追加と変更を行う。
protected function getCookieExpirationDate()
{
$config = $this->manager->getSessionConfig();
if ($this->isAdmin) { // 追加
$lifetime = $config['lifetime_admin']; // 追加
}else{ // 追加
$lifetime = $config['lifetime']; // 追加
} // 追加
return $config['expire_on_close'] ? 0 : Date::instance(
// Carbon::now()->addRealMinutes($config['lifetime'])
// ↓変更
Carbon::now()->addRealMinutes($lifetime)
);
}
もっと美しくて良い方法を教えて欲しい。。。