代码之家  ›  专栏  ›  技术社区  ›  Doug

Web浏览器不在Ajax调用中设置cookie

  •  0
  • Doug  · 技术社区  · 9 年前

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

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

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

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

    如有任何帮助,将不胜感激。我对此感到困惑,因为我读到的一切都表明了这一点 应该 这是可能的。

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   duncanhall    9 年前

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

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

    或者尝试设置 crossDomain 值:

    $.ajax({type:"GET", url:"localhost:8081/test", crossDomain:true});
    
        2
  •  0
  •   Community CDub    8 年前

    如果你想在Angular中做这件事,就像我一样,这就是你在那里做的方式:

    $http doesn't send cookie in Requests

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