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 请求?