Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari不是';不保存cookies,但Chrome是_Javascript_Node.js_Google Chrome_Cookies_Safari - Fatal编程技术网

Javascript Safari不是';不保存cookies,但Chrome是

Javascript Safari不是';不保存cookies,但Chrome是,javascript,node.js,google-chrome,cookies,safari,Javascript,Node.js,Google Chrome,Cookies,Safari,更新:值得一提的是,我的网站是通过iframe加载的 以下是我在app.js中的cookieSession: app.use(cookieParser()); app.use(cookieSession({ secret: "SECRET_SIGNING_KEY", maxAge: 15724800000 })); 然后,我尝试在登录时设置用户和令牌 app.post('/login', function(req, res){ Parse.User.logIn(req.bod

更新:值得一提的是,我的网站是通过iframe加载的

以下是我在app.js中的cookieSession:

app.use(cookieParser());

app.use(cookieSession({
  secret: "SECRET_SIGNING_KEY",
  maxAge: 15724800000
}));
然后,我尝试在登录时设置用户和令牌

app.post('/login', function(req, res){

   Parse.User.logIn(req.body.username, req.body.password).then(function(user) {
      req.session.user = user;
      req.session.token = user.getSessionToken();
      res.redirect('/dashboard');
    }, function(error) {
      console.log(error)
      req.session = null;
      res.render('login');
    });

});
这在Chrome中有效,但在Safari中不起作用

我已经通过web控制台检查了Safari存储,在我的域下没有保存任何内容


为什么它不起作用

如果页面加载到iframe中,最终用户可能会选择阻止您的网站写入cookie

看。更多信息


当直接访问页面而不是iframe时,您是否尝试查看cookie是否工作?

看起来您在这里遇到了Safari bug(); 您正在将任何访问的浏览器重定向到/dashboard,同时设置cookie,而Safari在遇到302(或301 I thing so)HTTP状态时将忽略设置的cookie头。 在这种情况下,您需要将
用户令牌
保存在变量中,并将其放入
/dashboard
控制器,然后重新检查
用户令牌
并将其存储在
请求会话

  • 更新:将您的令牌(由
    login
    controller生成)发布到
    dashboard
    controller
app.post('/login',函数(req,res){
Parse.User.logIn(req.body.username,req.body.password)。然后(函数(User){
res.redirect('/dashboard?token='+user.getSessionToken()+'&user='+user);
},函数(错误){
console.log(错误)
req.session=null;
res.render(“登录”);
});
});
应用程序post('/dashboard',功能(请求、回复){
if(req.query.user&&req.query.token){
//第一次保存
req.session.user=req.query.user;
req.session.token=req.query.user;
}
//在go之前检查会话中的令牌

});是的,我直接尝试了,效果很好。问题是我需要使用iframe。我正在为Shopify Embedded SDK构建一个应用程序,他们要求将其放在iframe中。您是否尝试更改隐私设置以允许第三方cookie,并查看其是否有效?是的,我尝试过,似乎有效。我只是觉得这对用户来说是一个障碍。不幸的是,Shopify要求我使用iFrame来显示我的站点,正如您所看到的,您可能需要跳出iFrame,设置cookie,然后重定向回原始页面(在本例中为Shopify)。也许会有帮助。这也是我在开发嵌入式Shopify应用程序时遇到的问题。如果
User-a
访问
/login
,并且在重定向时,
User-B
碰巧访问
/dashboard
,这不是一个安全漏洞吗?全局变量将分配给在有人登录后第一个访问页面的人。在这种情况下,
User-B
将拥有
User-A
的会话。
User-A
拥有一个令牌字符串
tokenA
,设置重定向将被设置为
res.redirect('/dashboard?token=tokenA')
在dasboard controller中,您可以获得
User-A
的所有信息,现在看起来不错。另外,safari bug的链接也非常有用,谢谢