【问题标题】:AJAX - Set-Cookie not working for same domain but different pathAJAX - Set-Cookie 不适用于相同的域但不同的路径
【发布时间】:2014-05-28 11:19:01
【问题描述】:

浏览器不允许我这样做:

1) 加载http://localhost:8080/myapp/page1 -> 这会将 JSESSIONID cookie 设置为 path=/myapp 和 domain=localhost

2) 通过 AJAX 请求,我调用 GET http://localhost:3000/login?user=xxx -> 在 Chrome 和 Firebug 的响应中,我看到: Set-Cookie: connect.sid=XXXXXXYYYYYY Path=/ domain=localhost

我期待当我执行另一个 ajax 调用时,例如http://localhost:3000/anotherCall(仍留在http://localhost:8080/myapp/page1),浏览器会在标头中发送 Cookie connect.sid。但是,它没有!

知道为什么吗?两个 cookie 属于同一个域,唯一的区别是路径,所以不应该有任何跨域问题。

另外,我尝试在 NodeJs 响应中设置此标头。结果相同:

res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Cookie, Content-Type, Authorization, Content-Length, X-Requested-With');
res.header('Access-Control-Expose-Headers', 'Set-Cookie, X-Powered-By');

从 Firebug 和 Chrome 开发工具检查 Cookie 信息,似乎浏览器根本没有存储 connect.sid cookie。我想知道是否假设域不同(一个是 localhost:8080,另一个是 localhost:3000...)

【问题讨论】:

    标签: javascript ajax node.js cookies cross-domain


    【解决方案1】:

    如果有人遇到同样的问题。我终于让它工作了:

    1. 额外添加标题

      res.header('Access-Control-Allow-Credentials', 'true');

    2. 在 $.ajax 调用中设置 xhrFields

      xhr 字段:{ withCredentials: 真 }

    现在 cookie 被添加到浏览器中并在后续请求中发送。

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 2018-08-13
      • 1970-01-01
      • 2014-01-04
      • 2019-10-21
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多