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的主要内容,如果未能解决你的问题,请参考以下文章

CORS 请求 - 为啥不发送 cookie?

SignalR Cors Cookie 未发送

使用 Vue Axios (CORS) 发送/存储会话 cookie 时出现问题

iecors - IE 8 + 9 中用于 CORS 的 jQuery 插件在页面首次加载时不起作用

CORS cookie 未在 Chrome 中发送

为啥浏览器在请求 JavaScript 文件时不发送 cookie?