Ajax 调用未存储 Cookie

Cookie not stored with Ajax call

我对饼干和 ajax 电话感到疯狂。

我的配置很简单。我 运行 8282 端口上的一个网站,(localhost.com:8282)。我的网站在 8080 端口 (localhost.com:8080) 上调用一些网络服务。当然,我在我的主机文件中添加了一行以避免本地主机问题:

127.0.0.1 localhost.com

我尝试在使用 ajax 调用网络服务时设置 cookie。这是我用 Chrome 调试器可以看到的回复 header :

Set-Cookie:token=Custom eyJ0aW1lc3RhbXAiOiIxNDI0NzE5Mzc5ODY3IiwgImlkIjoiNTRlNzZkZGU2ZDk3ZGM1MjYxZjQzMzFlIiwgInNpZ25hdHVyZSI6Im5tZnFGeEEvYlc0TFJGNFJNb3dBZXJZOUw0aWw0aEorcFh1YUt5b3VFK0k9In0=;domain=.localhost.com;path=/;

Chrome 从未存储 cookie。但是,当我使用 Rest client extension 并调用相同的网络服务时,cookie 由 Chrome 存储!所以我的 cookie 格式正确,但未使用 ajax 调用存储。

在您对 ajax 的关闭回复中,您可以设置您的 cookie

document.cookie = "token=Custom eyJ0aW1lc3RhbXAiOiIxNDI0NzE5Mzc5ODY3IiwgImlkIjoiNTRlNzZkZGU2ZDk3ZGM1MjYxZjQzMzFlIiwgInNpZ25hdHVyZSI6Im5tZnFGeEEvYlc0TFJGNFJNb3dBZXJZOUw0aWw0aEorcFh1YUt5b3VFK0k9In0=;domain=.localhost.com;path=/";

Can an AJAX response set a cookie?

这可能是 CORS 的问题(跨源资源共享,即 AJAX 调用的客户端域和目标域不是相同)。要使 cookie 在 CORS 配置中正常工作,您需要将 withCredentials 标志设置为 true。如何做到这一点取决于你 AJAX 库(如果你使用一个)。

看这里:http://www.html5rocks.com/en/tutorials/cors/