我很困惑。我有一个 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/