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
サーバー側で失われる可能性があります。セッションをサーバー側にどこに保存していますか? –
あなたは 'sessionStorage'を使用しています。つまり、ブラウザが閉じられると、データは消去されます。 'localStorage'を使用して永続化したいと思うでしょう。 –
明確にするために、設定されたページの同じインスタンスで、またはしばらくしてからnullが返されることを意味しますか? sessionStorageは揮発性であり、定期的にクリアされることを意図しています。 –