2016-07-11 10 views
0

ASP.NET MVCアプリケーションのレイアウトページに次のJavaScriptコードがあり、ユーザのブラウザ全体のIDをクッキーとして保存するため、サーバサイドのセッションの情報にアクセスできますそれぞれのユーザ。JavaScript:sessionStorageアイテムが失われる

if (sessionStorage.getItem("TestWindowId") == null) { 
     sessionStorage.setItem("TestWindowId", "@Guid.NewGuid().ToString("N")"); 
     $.removeCookie("Test_Cookie"); 
     storeWindowIdInBrowserWideCookie(); 
     window.location=document.URL; 
    } 

    if ($.cookie("Test_Cookie") !== sessionStorage.getItem("TestWindowId")) { 
     $.removeCookie("Test_Cookie"); 
     storeWindowIdInBrowserWideCookie(); 
     window.location=document.URL; 
    } 

    function storeWindowIdInBrowserWideCookie() { 
      var cookieValue = sessionStorage.getItem("TestWindowId"); 
      if (cookieValue != null) { 
       $.cookie("Test_Cookie", cookieValue); 
      } 
     } 

ほとんどの場合、これが機能します。

しかし、いくつかのユーザーにとってはランダムなケースがいくつかあります。sessionStorage.getItem("TestWindowId")は、以前に間違いなく設定されていた同じブラウザタブでnullを返します。そのような場合、IDとサーバー側のユーザー情報への接続は失われます。私のログによると、sessionStorageアイテムが設定され、同じブラウザタブのsessionStorageが再びnullだったコールバックコールで同じ秒です。

クライアント側のsessionStorageがアイテムを失う原因は何ですか?

私のロジックに誤りがありますか?

UPDATE:

私の思考パターンに問題がありました。問題は、sessionStorageアイテムが削除されたが、間違ったCookie値がリクエストとともにサーバーに送信されたということではありません。 質問が異なるので別のチケットを開けました: Store browser window specific id in cookie

+0

サーバー側で失われる可能性があります。セッションをサーバー側にどこに保存していますか? –

+2

あなたは 'sessionStorage'を使用しています。つまり、ブラウザが閉じられると、データは消去されます。 'localStorage'を使用して永続化したいと思うでしょう。 –

+0

明確にするために、設定されたページの同じインスタンスで、またはしばらくしてからnullが返されることを意味しますか? sessionStorageは揮発性であり、定期的にクリアされることを意図しています。 –

答えて

1

ドキュメントごとに異なります。

sessionStorageはWindow.localStorageに似ていますが、唯一の違いは、localStorageに格納されたデータに有効期限が設定されていない間に、に格納されたデータがページセッションが終了するとクリアされることです。ページセッションは、ブラウザが開いている間は続き、ページの再読み込みとリストアを繰り返します。 新しいタブまたは閉じるウィンドウでページを開くと、セッション記憶域の有効期限が切れる()。

クライアントがブラウザを閉じたり、新しいタブで開いたりすることがあります。

関連する問題