javascript - Web 浏览器未在 Ajax 调用上设置 cookie

标签 javascript jquery ajax cookies browser

我很困惑。我有一个 AJAX 调用,它会导致处理登录表单,并在成功登录时创建一个 cookie。 Web 浏览器未注册 cookie。

在故障排除中,我将其隔离为与 AJAX 调用站点有关的内容,而不是直接导航。

例如我创建了一个简单的页面“test”,它返回以下输出:

HTTP/1.1 200 OK
X-Powered-By: Express
Set-Cookie: token=ABCDEFG; Domain=localhost; Path=/
Content-Type: application/json; charset=utf-8
Content-Length: 19
ETag: W/"13-S4werj8PuppRlonJZs+jKA"
Date: Wed, 23 Sep 2015 22:09:03 GMT
Connection: keep-alive

{"message":"value"}

如果我直接导​​航到该页面,则会在浏览器中创建 cookie。

如果我对页面进行 AJAX 调用,则不会在浏览器中创建 cookie。 例如:

$.get('http://localhost:8081/test');

我发现了类似的帖子,其中指出如果未定义域或路径,AJAX 会发生这种情况,但正如您所看到的,我定义了这些,但仍然没有骰子。

如果重要的话,我的大部分测试都是在 Firefox 上进行的,但我确实在 Chrome 上做了至少一些测试。

如果您能提供任何帮助,我们将不胜感激。我对此感到困惑,因为我读到的所有内容都表明这应该是可能的。

进一步澄清: 1) 我在查看 Firefox 的 CookieManager+ 插件时没有看到创建的 cookie。 2)我也没有看到cookie添加到对同一主机(甚至同一端口)的后续请求中。 3)我读到的内容似乎表明cookie与主机而不是端口绑定(bind)(但这似乎不是基于#1和#2的问题): Are HTTP cookies port specific?

最佳答案

尝试在您的请求中设置withCredentials:

$.get('http://localhost:8081/test', {xhrFields: {withCredentials: true}});

或者尝试设置 crossDomain 值:

$.ajax({type:"GET", url:"localhost:8081/test", crossDomain:true});

关于javascript - Web 浏览器未在 Ajax 调用上设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750438/

相关文章:

javascript - 如何隐藏轮播 slider 上的溢出并设置循环

Javascript 从 JSON 文件中获取值

javascript - 当事件处理程序附加到父 HTML 元素时,如何防止默认事件操作?

javascript - 在 HTML 上提交时防止刷新

javascript - 检查第一个复选框是否被单击

javascript - 如何根据其祖 parent 的子值从列表中选择一个元素

jquery - Leaflet & Heatmap.js - 无法在 'getImageData' 上执行 'CanvasRenderingContext2D'

javascript - 嵌套元素中的文本替换

javascript - 网格面板的 ExtJS Ajax 问题

javascript - Yahoo Weather、Yahoo GeoPlant、Google Weather 或其他使用 javascript 连接的 API?