2016-12-05 34 views
0

我今天遇到了一個問題,我試圖確保用戶已通過身份驗證的令牌。我使用會話存儲來設置會話過期和服務器端cookie,無法通過javascript訪問它們以存儲其身份驗證令牌。目前的問題是,如果用戶打開一個新選項卡,他將不會登錄,因爲sessionStorage中沒有過期,但令牌cookie仍然存在。我正在考慮將sessionStorage的這種失效時間移至localStorage,以便用戶在打開新選項卡時仍然登錄,但是如果我的網站沒有活動選項卡,我想刪除此類localStorage條目。這可能檢查嗎?如果沒有對同一網址的活動標籤打開,銷燬localStorage

+0

爲什麼不使用服務器會話?他們很容易解決這個問題。直到他們關閉了每個窗口他們的會話是有效的 – Viney

回答

1

您可以將到期日期設置爲當前時間+ x(當x是短時間時,比如說一分鐘)。 然後編寫一個setInterval調用以在您的選項卡處於活動狀態時對其進行擴展。例如:

var expiration = new Date(); 
expiration.setMinutes(expiration.getMinutes() + 1); 
window.localStorage.setItem('MyTokenExpiration', JSON.stringify(expiration)); 

window.setInterval(function() { 
    var now = new Date(); 
    var tokenExpiration = new Date(JSON.parse(window.localStorage.getItem('MyTokenExpiration'))); 
    if(tokenExpiration.getSeconds() < now.getSeconds() + 30) { 
     tokenExpiration.setMinutes(now.getMinutes() + 1); 
     window.localStorage.setItem('MyTokenExpiration', JSON.stringify(tokenExpiration)); 
    } 
}, 30000); 
相關問題