說明透過 Laravel 登入後,如何在如果使用者有持續使用網站的情況下延長登入時間。
Laravel 的原理(Session 自動延長)
Laravel 的 auth
middleware 和 session 機制有以下特性:使用者登入後存取任一有 auth
middleware 的 route,就會自動更新 session 的 last_activity
時間(=續命)。
你可以在 config/session.php找到以下的程式碼更改 session 的設定。
'lifetime' => 180, // 分鐘
'expire_on_close' => false, // 若為 true,關閉瀏覽器就會登出
建立一隻「延長登入時間 API」
只要在 route 設定像這樣的規則:
Route::middleware(['auth'])->post('/keep-alive', function () { return response()->json(['ok' => true]); });
call api 更新登入時間
接著只要在頁面讀取時,去 call api 就可以在頁面打開就持續延長登入時間了。
// 一進頁面立即續命一次 axios.post('/keep-alive', {}, { withCredentials: true }); // 可選:每 5 分鐘 call 一次,避免靜態頁未操作被登出 setInterval(() => { axios.post('/keep-alive', {}, { withCredentials: true }); }, 5 * 60 * 1000); // 每 5 分鐘
第二段是如果要在頁面開啟時就持續延長可以加,如果只是想要有操作再延長就不用加那段。