我有两个网站http://www.example.com和 https://www.example.com .我正在使用 HTML5 session 存储来存储用户首选项。 用户到达 http://www.example.com我通过 ajax 加载一些默认设置。 他们浏览到需要登录的页面并被发送到 https://www.example.com/login.html 在他们完成登录后,他们将被发送回 http://www.example.com因为他们现在已经登录,所以我应该从服务器获取新设置。麻烦的是 http 和 https 是不同的来源,不能共享 session 存储。
我尝试过但不起作用的方法: 正在加载页面 http://www.example.com/clearSession.html在仅运行 sessionStorage.removeItem('key') 以清除我的数据的 iframe 中,但它似乎具有自己的浏览上下文,因此它不起作用。
我已经尝试过但我不想使用的东西: 使用 cookie。这很好用,因为 http 和 https 可以共享 cookie,但这意味着我的所有用户设置都会随每个资源请求一起发送到服务器。这通常约为 4k,但可能高达 1MB 的数据。不,我不能在不同的域上托管我的资源。
不缓存设置,只是每次请求获取设置。我在较旧的浏览器上执行此操作,因为它们不支持 session 存储,但它会减慢页面加载速度并给我的数据库增加额外的负载。
最佳答案
我可以告诉你我们是如何解决这个问题的,但是它不涉及本地sessionStorage。在用户访问我们的身份验证服务器并返回后,我们使用服务器端 session 来存储用户的登录数据(用户名、ID 等)。在他们通过身份验证之前,您仍然可以通过使用 AJAX 将这些首选项报告回服务器上的 Web 服务来从他们那里收集首选项数据,该 Web 服务可以将其存储在服务器的 session 范围内。但是,这会破坏 RESTful 模型,因为它会假定使用服务器端 session 。这将取决于您的服务器语言以及您如何设置 Web 服务。
我认为您总是会遇到那个起源问题,因为这是通常针对本地存储设计的限制。
关于html - 跨 http/https 清除 html5 sessionStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710647/