首页 文章

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

提问于
浏览
0

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

我的网页上有一个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 给出: ""

但是,设置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

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

相关问题