2012-03-14 88 views
2

我有兩個網站http://www.example.comhttps://www.example.com。我正在使用HTML5會話存儲來存儲用戶首選項。 用戶到達http://www.example.com,我通過ajax加載一些默認設置。 他們瀏覽到一個頁面需要登錄,併發送到https://www.example.com/login.html 他們完成登錄後,他們被髮回http://www.example.com因爲他們現在登錄,我應該從服務器獲取新的設置。麻煩的是,http和https是不同的起源,不能共享會話存儲。清除html5 sessionStorage跨http/https

事情我已經試過了不起作用: 在只運行sessionStorage.removeItem(「密鑰」)來清除我的數據的iframe加載一個頁面http://www.example.com/clearSession.html,但似乎這有它自己的瀏覽上下文,所以它不起作用。

事情我已經嘗試這項工作,但我不想使用: 使用cookie。這很好,因爲http和https可以共享cookie,但這意味着我的所有用戶設置都會在每次請求資源時發送到服務器。這通常是大約4k,但可能高達1MB的數據。否,我無法將資源託管在其他域中。

不要緩存設置,只是每次發出請求以獲取設置。我在舊版瀏覽器上這樣做,因爲它們不支持會話存儲,但它會減慢頁面加載速度並給我的數據庫帶來額外負擔。

+0

爲什麼在登錄前需要加載默認設置?爲什麼不假設是否沒有默認設置適用的設置? – robertc 2012-03-15 01:27:35

+0

這主要是關於確定我是否登錄並能夠在登出時清除設置。 – Jeff 2012-03-15 17:09:31

回答

0

我可以告訴你我們如何解決這個問題,但它不涉及本地sessionStorage。我們使用服務器端會話將用戶的登錄數據(用戶名,ID等)存儲到認證服務器後返回。在通過身份驗證之前,您仍然可以通過使用AJAX將這些首選項報告回服務器上的Web服務來將它們存儲在服務器的會話範圍中,以便從中收集首選項數據。這會破壞RESTful模型,但是,因爲它會假設使用服務器端會話。這將取決於您的服務器語言以及如何設置您的Web服務。

我認爲你總是會碰到這個原點問題,因爲這是一個設計在本地存儲中的限制。

+0

存儲所有服務器端的麻煩是我需要請求它,並且我試圖構建一個豐富的應用程序,而不控制我正在構建應用程序的頁面。 – Jeff 2013-04-05 19:12:38

-1

將所有內容切換到https,現在它已成爲標準。

+0

這沒有用。我與之連接的軟件不支持https。 – Jeff 2017-07-13 23:28:01