2010-08-05 49 views
4

我們實現了與此other SO post中描述的系統類似的系統。基本上,如果用戶在14分鐘內沒有做任何事情,我們會提示他們他們將被註銷。如果他們點擊「保持登錄狀態」,我們會執行ajax請求以保持其會話的活動狀態,否則,他們會在一分鐘後重定向到註銷頁面。帶有多個選項卡的自動註銷開放

它運行得非常好,並與mint.com和bankofamerica.com等網站上採用的類似系統聯機。唯一的問題是,我們的應用程序的用戶傾向於打開多個選項卡來反覆查看不同的數據片段。所以問題在於他們可能在一個標籤中正在積極工作,但是另一個標籤會超時並將其註銷。這會在用戶不期待它時導致用戶突然會話超時。順便說一句,mint.com有這個相同的問題。

所以我想知道是否有人有任何想法來對付這個?

我有一個想法,每個請求可以設置一個「最後活動時間」cookie。在自動註銷時,服務器可以檢查最後一次活動時間,如果它比較近,請避免將其註銷。手動註銷當然會忽略這個cookie,因此如果用戶想註銷,他可以隨時這樣做。但是,恐怕這可能會暴露出我目前無法看到的某種安全風險。思考?

+0

我知道很久以前它已經發布,但剛剛發現它並有這樣的想法:如果用戶有多個實例打開,14分鐘結束,彈出窗口將顯示在所有情況下。如果他們已經點擊「保持登錄狀態」(最好通過ajax),您可以在此時每隔x秒檢查一次(直到用戶將被退出)。我看到的問題是,如果您只檢查上次活動時間,一旦顯示彈出窗口並且用戶在一個選項卡中將其取消,則由於從另一個選項卡中退出,他們在一分鐘後仍會退出登錄。 – Chris 2012-05-22 20:47:52

+0

只需再添加一個步驟,@Chris:檢查服務器,看看它們在註銷之前是否已經重新上傳。如果他們沒有登出他們。 – vbullinger 2013-02-18 20:36:45

回答

2

在顯示彈出窗口之前,詢問服務器多久以前用戶完成了最後一次請求。

+0

我們目前不存儲最後一次請求時間......但是,也許如果我們顛倒了這個問題。如果我們爲每個請求設置該cookie,然後按照您的建議在顯示超時對話框之前檢查它。這樣,我們不會向服務器本身添加任何代碼。有趣的是,你認爲這可以工作和安全嗎? – 2010-08-05 13:54:58

+1

如果攻擊者可以讀取cookie,他已經有權訪問身份驗證cookie,並且他在系統中。所以這個cookie不會降低安全性。 – Sjoerd 2010-08-05 13:58:02