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

时间:2015-09-23 22:17:57

标签: javascript jquery ajax cookies browser

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

在故障排除方面,我把它分离到与调用网站的AJAX有关的事情,而不是直接导航。

e.g。我创建了一个简单的页面" 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。 e.g:

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

我发现了类似的帖子,声明如果没有定义域或路径,这会发生在AJAX中,但正如您所看到的,我定义了这些并且仍然没有骰子。

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

您将获得任何帮助将不胜感激。我对此感到困惑,因为我读到的所有内容都表明应该

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

2 个答案:

答案 0 :(得分:1)

尝试在您的请求中设置withCredentials

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

或者尝试设置crossDomain值:

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

答案 1 :(得分:0)

如果你想在Angular中尝试这样做,那就是你在那里做的:

$http doesn't send cookie in Requests

config(function ($httpProvider) {
    $httpProvider.defaults.withCredentials = true;