Cookie 未与 Ajax 调用一起存储

Posted

技术标签:

【中文标题】Cookie 未与 Ajax 调用一起存储【英文标题】:Cookie not stored with Ajax call 【发布时间】:2015-04-25 06:21:08 【问题描述】:

我对 cookie 和 ajax 调用感到疯狂。

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

127.0.0.1 localhost.com

当使用 ajax 调用 web 服务时,我尝试设置一个 cookie。这是我可以使用 Chrome 调试器看到的响应标头:

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

Chrome 绝不会存储 cookie。但是,当我使用Rest client extension 并调用相同的网络服务时,cookie 由 Chrome 存储!所以我的 cookie 格式正确,但没有通过 ajax 调用存储。

【问题讨论】:

【参考方案1】:

这可能是 CORS 的问题(跨源资源共享,即客户端的域和 AJAX 调用的目标域不同)。为了使 cookie 在 CORS 配置中正常工作,您需要将 withCredentials 标志设置为 true。具体操作方法因您的 AJAX 库而异(如果您使用的是其中一个)。

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

【讨论】:

感谢您的帮助,即使域相同且仅端口更改,是否也视为CORS问题?【参考方案2】:

在您对 ajax 的密切响应中,您可以设置您的 cookie

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

Can an AJAX response set a cookie?

【讨论】:

以上是关于Cookie 未与 Ajax 调用一起存储的主要内容,如果未能解决你的问题,请参考以下文章

即使响应包含ajax请求的“Set-Cookie”标头,cookie也不会存储在浏览器中

Spring Security CSRF 令牌存储库 Cookie 是不是会自动适用于所有 Ajax 请求?

cookie存储购物车数据

Cookie正在删除

Spring Security CSRF令牌存储库Cookie是否可以自动满足所有Ajax请求?

ajax --- 解决ajax跨域请求导致session失效的问题