AJAX响应可以设置cookie吗?

AJAX响应可以设置cookie吗? 如果不是,我的替代解决scheme是什么? 我应该用Javascript还是类似的东西来设置它?

是的 ,您可以在服务器端代码中的AJAX请求中设置cookie,就像您对普通请求所做的一样,因为服务器无法区分正常请求或AJAX请求。

AJAX请求只是向服务器请求的一种特殊方式,服务器需要响应任何HTTP请求。 在请求的回应中,您可以添加Cookie。

根据W3H规范第4.6.3节的XMLHttpRequest ,用户代理应该遵守Set-Cookie头。 所以答案是肯定的你应该能够。

报价:

如果用户代理支持HTTP状态pipe理,则应该保留,放弃和发送Cookie(如Set-Cookie响应头中所收到的,并在Cookie头中发送)。

为了logging,请注意,只有当AJAX调用在同一个域上时,以上所有内容才(真​​)仍然是真的。 如果您正在研究使用AJAX在另一个域上设置cookie,则会打开一个完全不同的蠕虫箱 。 然而,阅读跨域的cookies是行得通的(至less服务器是服务于他们的;不pipe你的客户的UA是否允许你的代码访问它们也是一个不同的话题;截至2014年他们也这样做)。

另外请检查您的服务器是否在非http请求上设置安全cookie。 刚刚发现我的ajax请求正在获得一个“安全”设置的PHP会话。 因为我没有在https上,所以没有发回会话cookie,我的会话在每个ajax请求上都被重置。