Safari扩展cookie未被识别/传递

时间:2011-07-25 12:43:14

标签: javascript cookies safari xmlhttprequest safari-extension

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

因此,在全局页面中,我向安全页面发出XMLHTTP请求,该页面仅在您登录后才可用。

示例:

  1. 我只是使用浏览器登录 - 通常是在Facebook或其他安全页面上进行登录
  2. 之后,在全局页面中,我加载了一个只能登录的xmlhttp - 它说我还没有登录
  3. 似乎全局页面有点拥有它自己的cookie,所以一个安全的页面认为我是新的

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

    pps:我听说在Safari中有一个阻止第三方cookie选项,但即使我检查它“永不阻止”它仍然无法正常工作

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我在Safari 5.1.2 for Windows中遇到了这个问题,但在升级到当前版本(5.1.7)之后问题就消失了。也许他们修复了一些中间版本。它也适用于Mac OS X的Safari 5.1.3。

答案 2 :(得分:0)

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

您需要确保在登录后,将浏览器重定向到HTTP并设置HttpOnly cookie,或者只是通过HTTPS执行XMLHttpRequest。这样会更安全,并没有真正增加太多的服务器开销(过去常常在硬件运行缓慢的情况下,但谷歌说,当Gmail过去使用HTTPS作为默认设置时,它对服务器负载的影响不会超过一对%)。

尝试将整个网站设置为通过HTTPS运行,看看是否可以修复它。此外,使用firebugfirecookie extension查看Cookie是否启用了这些选项中的任何一个(右侧两列)。

答案 3 :(得分:0)

Cookie必须不是"会话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
    }))
…