Chrome和IE没有设置响应Cookie

8
我试图弄清楚为什么Chrome(26.0.1410.64)和IE10似乎无法识别我在ASP.NET Web API控制器响应中设置的cookie。情况如下:我在页面上有一个下拉菜单登录表单,它通过HTTP POST向我的Web API方法进行ajax调用,该Web API方法返回一些JSON数据,并在响应中设置一个cookie(使用HTTP标头)。在Firefox和Safari(即,WebKit)中完美运作,但在Chrome或IE中不起作用。Chrome和IE似乎完全忽略发送回响应中的cookie。我已经验证(使用Fiddler)响应中会发送cookie,所以我知道它存在 - 但我想不出为什么IE10和Chrome不会接收它。有什么想法吗?这是否与Chrome和IE10如何处理ajax请求的响应cookie有关?
2个回答

21

所以我找到了问题,虽然这不是我想要接受的解决方案。我想我就只能处理它,并始终使用Firefox在我的本地机器上测试网站。

以下是问题:

当我从Visual Studio和IIS在我的本地机器上运行我的网站时,它会创建一个地址为http://localhost:1839/的网站。由于某种原因,当它是“localhost”时,IE10和Chrome会忽略ajax cookies——但不是当它是一个真实的主机名或IP地址。因此,如果我编辑我的主机文件并创建一个通用条目,如localhost.com,并将其指向127.0.0.1:1839,那么在IE和Chrome中一切正常(Firefox也一样)。

只有当我使用localhost:1839地址时,ajax cookie仅在Firefox中工作。

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

因此,对于那些通过ajax请求发送cookie的人,请注意Chrome和IE中的这个“localhost”问题。


1
我在Chrome v40中遇到了同样的问题。这真的很烦人。请看这里:http://i.imgur.com/q7lkXBz.gif - Gaui
1
是的,似乎Firefox仍然是唯一一个能够接受和存储本地主机cookie的浏览器,这就是为什么我在开发涉及ajax请求和cookie的任何内容时都使用它的原因。 - jamauss
我通过XMLHttpRequest解决了这个问题(链接:https://dev59.com/Fl4b5IYBdhLWcg3w5VE9#28594724)。 - Gaui

5

在设置cookie时,域名很可能与localhost冲突。如果您编辑hosts文件并添加别名,将使test.mydomain.com指向本地机器:

  • 在c:\windows\System32\drivers\etc\hosts中添加以下内容:
    • 127.0.0.1 test.mydomain.com
  • 在Visual Studio中启动您的Web服务器
  • 关闭所有浏览器,然后加载test.mydomain.com

这个技巧非常值得理解和实施,适用于在本地Windows环境下运行的所有网站。它将为您节省大量麻烦。 - fergal303

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接