IE10 使用 CORS 时不发送 cookie
Posted
技术标签:
【中文标题】IE10 使用 CORS 时不发送 cookie【英文标题】:IE10 does not send cookies when using CORS 【发布时间】:2016-08-23 23:28:48 【问题描述】:我在 Windows 8 Enterprise 上使用 IE v10.0.9200.xxx。
在执行 CORS 请求时,不会在 IE10 中发送 Cookie!
在 chrome 中运行良好!我可以在使用 chrome 时访问 cookie。 请求工作正常,我取回了数据,但在服务器端我没有 cookie。我检查了一下,我的 IE10 页面实例中有 cookie。
Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials 标头设置正确! 使用 IE10 时有什么需要遵守的吗? IE 一直是特定的 :-)
$.ajax(
type: 'GET',
url: 'https://mywebapi.dev/api/Values',
contentType: 'text/plain',
dataType: "json",
xhrFields:
withCredentials: true
,
headers:
,
success: function (data, msg, xhr)
alert(data);
alert(msg);
,
error: function (xhr, error)
);
在我的网络 API 消息处理程序中: ShareAble,Secure = true, HttpOnly=false
r.SetCookie("CookieName", "CookieValue", true, DateTime.Now.AddYears(10), false, "/", true, "");
【问题讨论】:
【参考方案1】:我在我的 web api response.headers 集合中添加了一个 P3P 标头:
r.Headers.Add("P3P", "CP=\"CURa ADMa DEVa CONo HISa OUR IND DSP ALL COR\"");
我没有检查 P3P 值的含义,所以请注意您设置了哪个值。
据我阅读并理解,该值可以是任何值"CP='XYZ'"
但一个问题仍然存在。使用 IE10,我只能从我的 web api 发布的 CORS 客户端获取和设置 cookie。当我使用 Chrome 时,我会在我的 web api 中获取所有 cookie!
Answer:
.withCredentials 属性将包含来自远程的所有 cookie 请求中的域,它还将设置来自 远程域。请注意,这些 cookie 仍然尊重同源 策略,因此您的 javascript 代码无法从 document.cookie 或响应标头。他们只能被控制 由远程域。
在 IE10 中添加自定义标头时,请求被中止。
headers:
/// request is aborted in IE10 when using custom header,
/// works in Chrome issueing a options preflight request
"AUTHORIZATION": "dev-client"
【讨论】:
以上是关于IE10 使用 CORS 时不发送 cookie的主要内容,如果未能解决你的问题,请参考以下文章
使用 Vue Axios (CORS) 发送/存储会话 cookie 时出现问题