我有两个网站http://www.example.com和https://www.example.com。我正在使用HTML5会话存储来存储用户首选项。 用户到达http://www.example.com并通过ajax加载一些默认设置。 他们浏览需要登录的页面并发送到https://www.example.com/login.html 完成登录后,它们会被发送回http://www.example.com,因为它们现在已登录,我应该从服务器获取新设置。问题是http和https是不同的起源,不能共享会话存储。
我尝试过的不起作用的事情 在仅运行sessionStorage.removeItem('key')的iframe中加载页面http://www.example.com/clearSession.html以清除我的数据,但似乎它有自己的浏览上下文,因此它不起作用。
我尝试过这项工作,但我不想使用: 使用cookie。这很有效,因为http和https可以共享cookie,但这意味着我的所有用户设置都会在每次资源请求时发送到服务器。这通常约为4k,但可能高达1MB的数据。不,我无法在不同的域上托管我的资源。
请勿缓存设置,并且每次只需提出请求即可获取设置。我在较旧的浏览器上执行此操作,因为它们不支持会话存储,但它会降低页面加载速度并对数据库造成额外负担。
答案 0 :(得分:0)
我可以告诉你我们是如何解决这个问题的,但它不涉及本地sessionStorage。我们使用服务器端会话来存储用户登录数据(用户名,ID等),然后再访问我们的身份验证服务器并返回。在对它们进行身份验证之前,您仍然可以通过使用AJAX将这些首选项报告回服务器上的Web服务来收集它们的首选项数据,该服务可以将其存储在服务器的会话范围中。但是,这会破坏RESTful模型,因为它会假设使用服务器端会话。这取决于您的服务器语言以及如何设置Web服务。
我认为你总会碰到那个原点问题,因为这是一般设计在本地存储中的限制。
答案 1 :(得分:-1)
将所有内容切换为https,现在是标准。