[英]JavaScript: sessionStorage loses item
我在ASP.NET MVC應用程序的“布局”頁面中具有以下JavaScript代碼,以Cookie的形式將用戶的瀏覽器范圍ID存儲為cookie,因此我可以在服務器端的會話中為相應用戶訪問信息。
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再次為空。
什么會導致客戶端的sessionStorage丟失項目?
還是我的邏輯有誤?
更新:
我的思維方式有問題。 問題不在於sessionStorage項目已刪除,而是與請求一起向服務器發送了錯誤的cookie值。 由於問題不同,我打開了另一張票證:將瀏覽器窗口特定的ID存儲在Cookie中
根據文檔。
sessionStorage與Window.localStorage類似,唯一的區別是,存儲在localStorage中的數據沒有設置過期時間,存儲在sessionStorage中的數據在頁面會話結束時被清除。 頁面會話的持續時間只要瀏覽器處於打開狀態,並且在頁面重新加載和還原后仍然存在。 在新標簽頁或關閉窗口中打開頁面將導致會話存儲過期 。
因此,客戶端可能已關閉瀏覽器或在新選項卡中打開它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.