2017-08-16 37 views
1

我發現很多Q & A關於如何在關閉選項卡或窗口時執行腳本或警報。但是,假設您進行身份驗證,並且想要將您的JWT保存在localStorage(LS)中。只要你的令牌還活着,你就會從LS中檢索它。關閉選項卡/窗口時保持/清除localStorage /會話的最佳方法

我希望當我關閉選項卡或窗口中顯式刪除我的令牌(按Ctrl + W¯¯按Ctrl + F4Alt鍵 + F4

我來了

<script> 
$(window).on('beforeunload', function(event){ 
    window.localStorage.removeItem("myID"); 
}); 
</script> 
:這個主意在我的網頁這樣的beforeunload定義腳本

但後來我意識到刷新F5 onbeforeunload將執行,我將清除LS。

於是我想出了這個解決方案

<script> 
var clearLocalStorage = true; 
$(window).on('keydown', function(event){ 
    if(event.keyCode == 116 || //F5 
     (k == 16 && k == 17 && k == 82) || //Shift + Ctrl + R 
     (k == 17 && k == 82)){ //Ctrl + R 
     clearLocalStorage = false; 
     event.preventDefault(); 
    } 
}); 

$(window).on('beforeunload', function(event){ 
    if(clearLocalStorage){ 
     window.localStorage.removeItem("myID"); 
    } 
}); 
</script> 

這與F5效果很好,因爲它並不清楚我的LS,但如果我做按Ctrl + [R,它會失去我的來自LS的令牌。

登錄我想繼續我的令牌上那麼LS之後....

  1. 在任何刷新意味着它應該始終保持從LS令牌即使進一步你按Ctrl +[R + 按Ctrl +[R

  2. 點擊瀏覽器的URL地址並按輸入重新加載頁面。

  3. 僅當用戶關閉標籤或窗口時清除。如果您重新打開選項卡,則需要重新登錄頁面。

我已經想在上OnClose事件關閉該窗口,如下所示的時刻來控制LS,但我詢問的開發商工具的控制檯上的LS,我可以看到,它沒有工作令牌仍然存在。

<script> 
    window.onClose = function(){ 
     window.localStorage.removeItem("myID"); 
    } 
</script> 

我不知道什麼是管理的LS和令牌會話的最佳方法時,刷新和/或關閉標籤或窗口使用jQuery,智威湯遜,僅HTML和angularjs 1.5嗎?

在此先感謝。

回答

0

嘗試定時事件:

var clearLocalStorage = true; 
$(window).on('keydown', function(event){ 
    if(event.keyCode == 116 || //F5 
     (k == 16 && k == 17 && k == 82) || //Shift + Ctrl + R 
     (k == 17 && k == 82)){ //Ctrl + R 
     clearLocalStorage = false; 
     event.preventDefault(); 
    } 
}); 

$(window).on('beforeunload', function(event){ 
    setTimeout(function(){ 
    if(clearLocalStorage) 
     window.localStorage.removeItem("myID"); 
    else 
     window.localStorage.persistItem("myID"); // make a persistent item in case 
    }, 10); // I don't recommend anything above 100ms 
}); 
相關問題