AJAX响应可以设置cookie吗?

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

151546 次浏览

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

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

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

报价:

如果用户代理支持HTTP状态管理,它应该持续存在, 丢弃并发送cookie(在Set-Cookie响应中收到的cookie)

为了记录,请注意,只有在同一个域上进行AJAX调用时,上述所有内容(仍然)是正确的。如果你正在使用AJAX在另一个域上设置cookie,你将打开一个完全不同的棘手的问题。然而,读取跨域cookie是可以工作的(或者至少服务器为它们提供服务;你的客户端的UA是否允许你的代码访问它们,这又是一个不同的话题;到2014年为止,他们确实如此)。

还要检查服务器是否在非http请求上设置了安全cookie。刚刚发现我的ajax请求得到一个php会话与“安全”设置。因为我不是在https上,它没有发送回会话cookie,我的会话在每个ajax请求上得到重置。