8

我试图弄清楚为什么 Chrome (26.0.1410.64) 和 IE10 似乎无法识别我在来自 ASP.NET Web API 控制器的响应中设置的 cookie。情况如下:

我的页面上有一个下拉菜单登录表单,它对我的​​ Web API 方法(通过 HTTP POST)进行 ajax 调用,并且该 Web API 方法返回一些 JSON 数据并在响应中设置一个 cookie(使用 HTTP 标头) . 它在 Firefox 和 Safari(所以,WebKit)中完美运行,但在 Chrome 或 IE 中无法正常运行。Chrome 和 IE 似乎完全忽略了在响应中发回的 cookie。我已经验证(使用 Fiddler)cookie 是在响应中发回的,所以我知道它在那里 - 我不知道为什么 IE10 和 Chrome 不接收它。

有任何想法吗?它与 Chrome 和 IE10 如何处理 ajax 请求中的响应 cookie 有关吗?

4

2 回答 2

21

所以我发现了这个问题,尽管这不是我真正愿意接受的解决方案。我想我只需要处理它并始终使用 Firefox 在我的本地计算机上测试该站点。

那么问题来了:

当我通过本地计算机上的 Visual Studio 和 IIS 运行我的站点时,它会在http://localhost:1839/. 出于某种原因,当它是“本地主机”时,IE10 和 Chrome 会忽略 ajax cookie - 但当它是真实的主机名或 IP 地址时不会。因此,如果我编辑我的主机文件并创建一个像 localhost.com 这样的通用条目并将其指向 127.0.0.1:1839,那么在 IE 和 Chrome(以及 Firefox 仍然如此)中一切正常。

当我使用localhost:1839ajax cookie 仅在 Firefox 中有效的地址时。

所以我最终做的是将我的网站部署到不同的测试 IIS 服务器(在另一台机器上),我在本地主机文件中有一个 test.mydomain.com 条目,它指向测试 IIS 服务器的 IP 地址。现在 IE、Chrome 和 Firefox 都接受来自这个伪造的“test.mydomain.com”域的 ajax cookie。

因此,对于那些在 ajax 请求中发送回 cookie 的人来说,请注意 Chrome 和 IE 的“本地主机”问题。

于 2013-04-28T20:43:34.190 回答
5

设置 cookie 上的域很可能与使用 localhost 冲突。如果您编辑主机文件并添加别名,它将使 test.mydomain.com 指向您的本地计算机:

  • 在 c:\windows\System32\drivers\etc\hosts 添加以下内容:
    • 127.0.0.1 test.mydomain.com
  • 在 Visual Studio 中启动您的网络服务器
  • 关闭所有浏览器,然后加载 test.mydomain.com
于 2013-07-10T12:47:39.190 回答