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是不同的来源,不能共享会话存储。

我试过的东西不起作用:在一个 iframe 中 加载一个页面http://www.example.com/clearSession.html,它只运行 sessionStorage.removeItem('key') 来清除我的数据,但似乎这有它自己的浏览上下文,所以它不起作用。

我尝试过但我不想使用的东西: 使用cookie。这很好用,因为 http 和 https 可以共享 cookie,但这意味着我的所有用户设置都会随每个资源请求一起发送到服务器。这通常约为 4k,但可能高达 1MB 的数据。不,我不能在不同的域上托管我的资源。

不要缓存设置,每次都发出请求以获取设置。我在较旧的浏览器上执行此操作,因为它们不支持会话存储,但它会减慢页面加载并给我的数据库增加额外的负载。

4

2 回答 2

0

我可以告诉你我们是如何解决这个问题的,但它不涉及本地 sessionStorage。在用户访问我们的身份验证服务器并返回后,我们使用服务器端会话来存储用户的登录数据(用户名、ID 等)。在它们通过身份验证之前,您仍然可以通过使用 AJAX 将这些首选项报告回服务器上的 Web 服务,该 Web 服务可以将其存储在服务器的会话范围中,从而从它们那里收集首选项数据。然而,这会破坏 RESTful 模型,因为它会假设使用服务器端会话。这将取决于您的服务器语言以及您如何设置 Web 服务。

我认为您总是会遇到该起源问题,因为这是一般设计到本地存储的限制。

于 2013-04-04T11:12:07.653 回答
-2

将所有内容切换到 https,它现在是一个标准。

于 2017-07-13T18:49:13.503 回答