Internet Explorer 为授权设置跨域 cookie
Posted
技术标签:
【中文标题】Internet Explorer 为授权设置跨域 cookie【英文标题】:Internet Explorer set cross domain cookies for authorization 【发布时间】:2013-03-23 18:59:03 【问题描述】:我在下一个域上有两个应用程序:www.bar.com 和 www.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 调用失败
无法让跨域 getJSON 调用在 Internet Explorer 上运行,在 Firefox 上运行良好,在 IE 和 Firefox 的单个域上运行