我有一个简单的网页,该网页使用客户端脚本在浏览器本地存储中存储一些用户配置。 (复选框的状态,展开/折叠的菜单等)
我的网页上有一个Patreon按钮。当用户单击它时,用户的浏览器将导航到Patreon身份验证页面,如果用户单击一个按钮以授予我访问其用户支持状态的权限,Patreon会将其浏览器重定向到我网站上的路由,在该路由中我记录其支持状态并然后将它们重定向回我的主页。
当用户最终回到我的主页时,该用户的所有本地存储数据都丢失了。如果用户回到我的站点后单击“刷新”,则本地存储仍然丢失。但是,如果他们关闭选项卡并在新选项卡中打开我的网站(或导航到另一个站点,然后在同一选项卡中返回),则原始本地存储值将再次可见。
我了解浏览器本地存储与本地存储的来源相关联。 https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
我已经确认协议(https)和域在设置存储点和用户返回我的站点时都是相同的。我还确认了最终的登陆路线是相同的。
最初设置本地存储值的主页:https://www.example.com/page1
最终目标网页:https://www.example.com/page1
我注意到,如果我在Patreon重定向路线(Patreon最初重定向用户并记录用户支持状态的位置)处停止用户,则打开浏览器调试器并发出document.domain
会得到:""
< / p>
但是,设置document.domain和刷新不会恢复本地存储。
我在Firefox 63.0.3(64位)和Chrome 71.0.3578.80(64位)中都看到了这种情况。
有什么想法我可能会错过吗?
[编辑]这是我用来将用户状态写入本地存储的代码:
if(localStorage.userOptions){ restoreOptsFromLocal(); }
else{ persistOptsToLocal(); }
...
restoreOptsFromLocal = function(){
opts = JSON.parse(localStorage.getItem('userOptions'));
}
persistOptsToLocal = function(){
localStorage.setItem('userOptions', JSON.stringify(opts));
}
答案 0 :(得分:0)
花了几个小时进行搜索和调试,但仍然不了解根本原因。当前的解决方法是将Patreon href的目标设置为“ _blank”,以便在单独的窗口中进行patreon身份验证过程。