【问题标题】:Response Cookie not getting set by Chrome & IE响应 Cookie 未由 Chrome 和 IE 设置
【发布时间】:2013-04-22 05:07:43
【问题描述】:

我试图弄清楚为什么 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 的方式有关系?

【问题讨论】:

    标签: ajax google-chrome cookies asp.net-web-api internet-explorer-10


    【解决方案1】:

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

    那么问题来了:

    当我在本地计算机上通过 Visual Studio 和 IIS 运行我的站点时,它会在http://localhost:1839/ 之类的地址创建一个网站。出于某种原因,当它是“本地主机”时,IE10 和 Chrome 会忽略 ajax cookie - 但当它是真实的主机名或 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 的“本地主机”问题。

    【讨论】:

    • 我在使用 Chrome v40 时遇到了同样的问题。这真的很烦人。见这里:i.imgur.com/q7lkXBz.gif
    • 是的,Firefox 似乎仍然是唯一真正接受和存储 localhost cookie 的浏览器,这就是为什么我用它来开发任何涉及 ajax 请求和 cookie 的东西。
    • 我用 XMLHttpRequests 设法solve this
    【解决方案2】:

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

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

    【讨论】:

    • 这个技巧非常值得理解和实施,适用于在 localhost Windows 环境中运行的所有站点。它会为您省去很多麻烦。
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-02-20
    相关资源
    最近更新 更多