Safari扩展cookie未被识别/通过

Safari extension cookies not recognized/passed

本文关键字:识别 通过 扩展 cookie Safari      更新时间:2023-09-26

我最近一直在将Chrome扩展移植到Safari,并遇到了这种错误(错误,功能等)

因此,在全局页面中,我有一个XMLHTTP请求到一个安全页面,只有在您登录后才可用。

的例子:

  1. 我只是使用浏览器登录-通常你做在facebook或其他安全页面
  2. 之后,在全局页面中,我加载一个仅登录可用的xmlhttp -它说我没有登录

似乎全局页面有它自己的cookie,所以一个安全的页面认为我是新的

ps:在Chrome中,我可以加载该页面,它认为我代表登录用户行事,所以我猜在Safari中有一些限制

pps:我听说在Safari中有一个阻止第三方cookie的选项,但即使我把它选中"从不阻止",它仍然不起作用

不幸的是,这个问题在safari 5.1.7 windows版本中仍然存在。

我找到了一个解决方法,通过消息传递将登录凭据(用户名/密码对)传递到全局页面,全局页面使用它们静默登录。

我在Windows的Safari 5.1.2中遇到了这个问题,但升级到当前版本(5.1.7)后,这个问题消失了。也许他们把它固定在某个中间版本上。我在Mac OS x的Safari 5.1.3上也能运行。

cookie可以选择标记为HttpOnly或Secure。如果它没有传递它们,那么您可能正在尝试从登录后的HTTPS登陆页面访问同一站点上的HTTP资源,因此浏览器将不允许通过非安全链接发送安全cookie。实际上,HTTP和HTTPS站点被视为独立的。

您需要确保在登录后,将浏览器重定向到HTTP并设置HttpOnly cookie,或者仅通过HTTPS执行XMLHttpRequest。这将是更安全的,并没有真正增加太多的服务器开销(它曾经是当硬件很慢,但谷歌说,当Gmail转向使用HTTPS作为默认设置,它不会影响服务器负载超过百分之几)。

尝试将整个站点设置为通过HTTPS运行,看看是否可以修复它。另外,使用firebug和firecookie扩展来查看cookie是否启用了这些选项中的任何一个(右侧两列)。

cookie不能是"Session cookie ",它们必须是持久的。设置截止日期

需要在服务器端完成。例如,对于Node.js/Express像这样:

var session = require('cookie-session');
…
var cookieExpires = new Date();
cookieExpires.setDate(cookieExpires.getDate() + 1); // Set 1 day cookie lifetime
…
app.use(
    session({
        …
        name: 'session',
        expires: cookieExpires
    }))
…