Internet Explorer 9 AJAX 请求上没有会话 Cookie

Posted

技术标签:

【中文标题】Internet Explorer 9 AJAX 请求上没有会话 Cookie【英文标题】:No Session Cookies on Internet Explorer 9 AJAX requests 【发布时间】:2012-11-01 06:52:13 【问题描述】:

Internet Explorer 9 没有通过我的 AJAX 请求发送会话 cookie。

当我通过 AJAX 向我的 API 发出身份验证请求时,它会返回一个设置会话 cookie 的响应。通过 AJAX 对 API 的后续调用不会将 cookie 发送回服务器。

API 位于同一主机上。同样,常规的非 AJAX 页面请求也不会显示会话 cookie。我关闭了 Internet 选项中的所有隐私和安全设置。 Chrome 会正确发送 cookie。

如何让 IE 返回 cookie?谢谢!

【问题讨论】:

你能发布 HTTP 请求和响应标头吗? 我今天遇到了同样的问题。我还没有找到解决办法。请随时更新此问题的可能方法! 我找到了dotnet-developer.de/2012/01/aspnet/…,但我还没有完全理解它。如果我只添加所描述的 HTTP-Header 一切似乎都可以工作,但 IE 仍然说我没有隐私政策。 我认为您的问题已经在另一篇文章中得到解答:***.com/a/389458/344477 【参考方案1】:

我尝试访问的 URL 使用了下划线字符 ('_')。这是一个无效的 URL,因此 Internet Explorer 不能正确接受 cookie。解决这个问题解决了我的问题实例。

【讨论】:

我也有同样的问题,而且我的网址也有下划线。您的 URL 在域或子域或 URL 的其余部分是否有下划线?【参考方案2】:

我在获取请求时遇到了 IE9 的这个问题。我从 $.getJSON(使用带有查询字符串参数的 url)转换为 $.ajax(使用帖子)。我的理论是,类似于 MS 的 MVC 服务器库,IE 不喜欢返回 JSON 的获取请求。(你必须在 MVC 中明确允许这样做,否则它会给你一个错误,表明返回 JSON 的获取请求有一些安全风险错误) 无论如何,由于这是我在谷歌上的热门歌曲之一,我想我会发布对我有用的内容。

【讨论】:

【参考方案3】:

只需将 Math.random() 放在 url 中,

$.ajax(
    type: "GET",
    url: "getRequestData.do?parameter=GetModelService&t="+Math.random(),
    data: "sub=ADD",
    cache: false,
    ................
    ...............

【讨论】:

【参考方案4】:

尽量避免使用 localhost 或 127.0.0.1 作为 URL 的一部分,看看是否有什么不同。

【讨论】:

以上是关于Internet Explorer 9 AJAX 请求上没有会话 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 取消 ajax 请求

Internet Explorer 中允许的 Ajax 跨域请求

Internet Explorer 从 ajax 调用中插入选择选项

从 Internet Explorer 中的 AJAX 响应中删除 SCRIPT 标记

Internet Explorer 中的跨域 POST 请求 ajax

Internet Explorer 中的跨域 POST 请求 ajax