21

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

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

例子:

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

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

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

pps:我听说 Safari 中有一个阻止第三方 cookie 选项,但即使我将其选中“从不阻止”它仍然不起作用

4

4 回答 4

3

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

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

于 2012-11-04T10:57:22.133 回答
1

我在使用 Safari 5.1.2 for Windows 时遇到了这个问题,但升级到当前版本 (5.1.7) 后,问题就消失了。也许他们将其固定在某个中间版本上。它也适用于 Mac OS X 的 Safari 5.1.3。

于 2012-07-06T23:27:27.363 回答
0

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

您要么需要确保在登录后将浏览器重定向到 HTTP 并设置 HttpOnly cookie,要么只需通过 HTTPS 执行 XMLHttpRequest。这会更安全,并且不会真正增加太多的服务器开销(它曾经在硬件速度很慢时使用,但谷歌表示当 Gmail 转而使用 HTTPS 作为默认设置时,它对服务器负载的影响不会超过几个百分比)。

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

于 2012-02-15T15:19:17.743 回答
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
    }))
…
于 2015-03-26T11:53:02.117 回答