說明透過 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 分鐘

第二段是如果要在頁面開啟時就持續延長可以加,如果只是想要有操作再延長就不用加那段。