2017-08-16 4 views
1

タブまたはウィンドウを閉じるときにスクリプトまたはアラートを実行する方法については、Q &が見つかりました。ただし、認証を行い、JWTをlocalStorage(LS)に保持したいとします。あなたのトークンが生きている限り、あなたはLSからそれを取り出すでしょう。タブ/ウィンドウでlocalStorage/sessionを維持/消去するための最善のアプローチが閉じられました

私はタブまたはウィンドウを閉じたときに、明示的に私のトークンを削除する

はCtrl + またはCtrlキー + F4またはAltキーW + F4

私が来ました私のページのbeforeunloadに次のようにスクリプトを定義するというアイディアを持っています:

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

しかし、私はリフレッシュ時にF5がonbeforeunloadを実行することを認識し、私はLSをクリアします。

は、その後、私はそれが私のLSをクリアしませんが、私はCtrlキー + Rをすれば、それは私を失うことになるので、これはF5でうまく動作

<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> 

この解決策を考え出しましたLSからのトークン。どんなことでリフレッシュに

  1. はそれがさらにあなたが+ Ctrlキーを行う場合でも、LSから常にトークンを保持するべきであることを意味

    ログイン後、私はその後、LSの上に私のトークンを維持したい.... RまたはブラウザのURLアドレスのShift +はCtrl +R

  2. クリックを入力してください。と入力してページをリロードしてください。

  3. ユーザーがタブまたはウィンドウを閉じるときにのみ消去します。タブを再度開くと、再度ログインページに移動する必要があります。

私はすでに次のようにOnCloseのイベントで、ウィンドウを閉じた瞬間にLSをコントロールしたかったが、私は、私はそれを見ることができ、開発者ツールのコンソール上でLSを照会として、それは動作しませんでしたトークンはまだそこにあります。

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

私はさわやかおよび/またはjqueryのを使用して、タブやウィンドウを閉じLSとトークンのセッションを管理するための最良の方法だろうか疑問、JWT、HTMLのみと1.5をangularjs?

ありがとうございます。

答えて

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 
}); 
関連する問題