Patreon重定向后浏览器本地存储丢失

时间:2018-12-08 23:55:07

标签: javascript google-chrome firefox redirect local-storage

我有一个简单的网页,该网页使用客户端脚本在浏览器本地存储中存储一些用户配置。 (复选框的状态,展开/折叠的菜单等)

我的网页上有一个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));
}

1 个答案:

答案 0 :(得分:0)

花了几个小时进行搜索和调试,但仍然不了解根本原因。当前的解决方法是将Patreon href的目标设置为“ _blank”,以便在单独的窗口中进行patreon身份验证过程。