Javascript Safari不是';不保存cookies,但Chrome是
更新:值得一提的是,我的网站是通过iframe加载的 以下是我在app.js中的cookieSession: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
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
控制器,然后重新检查用户令牌
并将其存储在请求会话
中
- 更新:将您的令牌(由
controller生成)发布到login
controllerdashboard
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的链接也非常有用,谢谢