Internet Explorer 为授权设置跨域 cookie

Posted

技术标签:

【中文标题】Internet Explorer 为授权设置跨域 cookie【英文标题】:Internet Explorer set cross domain cookies for authorization 【发布时间】:2013-03-23 18:59:03 【问题描述】:

我在下一个域上有两个应用程序:www.bar.comwww.foo.bar.com。第二个应用程序通过第一个应用程序进行授权(使用跨域请求) 在此之后,我将 cookie 设置为浏览器,但在 Internet Explorer 中它不起作用:

$.cookie("SESSION_KEY", loginResult.sessionKey, 
        expires: 365,
        path: "/",
        domain: ".bar.com"
);

该代码适用于除 Internet Explorer v.9 之外的所有浏览器。未设置 cookie。我该如何解决?

【问题讨论】:

【参考方案1】:

这是由于 IE 设置造成的。从Tools 菜单中,选择Internet Options。导航到Security 选项卡。选择 Internet Web 内容区域并单击 Custom Level 打开安全设置。

找到Miscellaneous 设置。尝试启用Access data sources across domains。您可能需要重新启动 IE 才能使设置生效。

【讨论】:

但是,它是一个网络应用程序。我不能告诉所有用户在他们的浏览器中执行此操作。 :)【参考方案2】:

IE 作为市场上唯一的一种网络浏览器,实现了部分 P3P 标准(即关于 CORS 中的接受 cookie)

所以您可以使用服务器响应设置 cookie - 为此您必须在服务器响应中设置此标头(设置 cookie)(我从我的 php symfony 项目中复制粘贴以下行):

$response->headers->set('P3P', 'CP="random_text"');

您还必须记住在您的 CORS 请求中添加标志“withCredentials=true”(在其他情况下,任何 cookie 都将从请求/响应中发送/保存)。

【讨论】:

以上是关于Internet Explorer 为授权设置跨域 cookie的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 中的跨域 POST 请求 ajax

Internet Explorer 中的跨域 POST 请求 ajax

在 Internet Explorer 上使用 Windows 身份验证通过 SSL 进行跨域 ajax 调用失败

Internet Explorer 中跨站点请求的访问控制

无法让跨域 getJSON 调用在 Internet Explorer 上运行,在 Firefox 上运行良好,在 IE 和 Firefox 的单个域上运行

为 Internet Explorer 设置占位符? [复制]