如果我是對的,會話存儲將存儲在客戶端,並且只能爲一個選項卡訪問。將HTML5會話存儲發送到服務器
如何將存儲在會話存儲中的信息發送到服務器?我可以使用cookie,但如果我打開2個選項卡,cookie將被第二個選項卡重寫。
由於
如果我是對的,會話存儲將存儲在客戶端,並且只能爲一個選項卡訪問。將HTML5會話存儲發送到服務器
如何將存儲在會話存儲中的信息發送到服務器?我可以使用cookie,但如果我打開2個選項卡,cookie將被第二個選項卡重寫。
由於
的sessionStorage可用於1個域,而不是1個標籤。因此,您可以在一個選項卡中的頁面上設置信息,並在第二個選項卡中將其讀出。對不起,我認爲它是這樣工作的。但事實並非如此,您需要使用localStorage或cookie才能正常工作。
因此,將它存儲在cookie中是一個可行的選擇,但如果你這樣做,爲什麼你甚至使用sessionStorage?
你也可以通過Ajax發送的sessionStorage的內容服務器,(但你必須將數據轉換成JSON,因爲你只能發送字符串)
但是,如果你在服務器上保存的信息呢,你爲什麼使用sessionStorage? localStorage和sessionStorage的重點是保存服務器不需要了解的用戶特定信息。
* sessionStorage可用於1個域,而不是1個選項卡* - 不正確:請參閱https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage#sessionStorage - 這是一個全局對象( sessionStorage),它維護在頁面會話期間可用的存儲區域。只要瀏覽器處於打開狀態並且在頁面重新加載和恢復時存在,頁面會話就會持續。在新選項卡或窗口中打開頁面將導致啓動新的會話。 – Quentin
我站在糾正,我認爲它會使用同一屆會議,如果有兩個或更多的標籤打開同一頁面。我只是嘗試了,情況並非如此。 – Johan
存儲對象(包括localStorage和sessionStorage)都可以從打開相同頁面的所有標籤中獲得。
但是(某些註釋表明這不正確,但這是對文檔的誤解),當您打開一個新選項卡時,將在內部創建一個新的存儲對象。這是第一個克隆,所以在這一點上的內容是相同的。
他們被分開處理,但通過在代碼中監聽storage
event來同步它們。
從http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute:(注意規格正在解決的實施者)
當通過克隆 現有瀏覽上下文創建了一個新的頂級瀏覽上下文,新的瀏覽上下文必須 的開始與原來的會話存儲區相同,但兩套必須從 被認爲是分開的,互不影響 任何方式。 [...]在與會話 存儲區域[012],相關聯的存儲對象x上調用setItem(),removeItem()和clear()方法 ,窗口 對象的sessionStorage屬性的存儲對象與 相關聯的存儲區域相同,除了x,發送存儲通知。
也就是說,當存儲在有源標籤被修改時,一個事件storage
被髮送到所有其他標籤(對於相同的原點) - 但不是這當然是不需要的活動標籤因爲這是被修改的人。
使用event閱讀key
和newValue
領域,以更新目前不活躍選項卡(S)的localSession
(也有個oldValue
上的事件)。storageArea
包含受影響的存儲對象(如果您同時使用本地存儲和會話存儲,則會很有用)。
至於「一個域名」 - 是的,只有相同的數據只能用於相同的原產地(方案,域名和端口)。
發送數據到服務器是完全可能的。存儲在存儲(會話和本地)中的所有內容都以字符串形式存儲。我會推薦編碼它(JSON是而不是,因爲它已經存儲爲一個字符串)。使用f.ex:
var dataForServer = encodeURIComponent(sessionStorage.getItem(myKey));
然後將其作爲表單,網址或ajax的一部分發送。
ajax請求浮現在腦海。 –