AJAX响应可以设置cookie吗?

Bil*_*ory 255 cookies ajax

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

Str*_*lok 290

根据用于XMLHttpRequestw3规范部分4.6.3,用户代理应该遵守Set-Cookie头.所以答案是肯定的,你应该能够.

报价:

如果用户代理支持HTTP状态管理,它应该保留,丢弃并发送cookie(如Set-Cookie响应头中所接收的,并在Cookie头中发送)(如果适用).


thi*_*eek 238

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

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

  • 请记住,HTTP代理是否会尊重cookie是另一回事. (37认同)
  • 如果服务器可以使用Set-Cookie标头回复ajax请求,则会回答此问题.当然可以,但问题是该响应是否会实际导致客户端读取和设置ajax响应中收到的cookie,或者是否必须手动完成.这不是答案. (10认同)
  • `如果用户代理支持HTTP状态管理,它应该保留,丢弃并发送cookie(在Set-Cookie响应头中收到,并在Cookie头中发送)(如果适用) - 来自http://www.w3.组织/ TR/XMLHttpRequest的/ (9认同)
  • @Franci:同意了.但我认为这个问题只适用于支持cookie的http客户端.因此,所有提问者只想知道是否可以用AJAX请求编写cookie,这意味着他的UA支持cookie :) (6认同)
  • @Legends Ajax请求通常将X-Requested-With标头设置为XMLHttpRequest,这是如何识别它们,但是可以在没有此标头的情况下发出请求,如果发生这种情况则无法区分正常的页面加载 (2认同)

Bog*_*scu 85

对于记录,请注意,只有在同一域上进行AJAX调用时,上述所有内容才会(仍)为真.如果您正在考虑使用AJAX在另一个域上设置cookie,那么您将打开一个完全不同的蠕虫病毒.但是,阅读跨域cookie确实有效(或者至少服务器为它们提供服务;您的客户的UA是否允许您的代码访问它们是一个不同的主题;截至2014年,它们也是如此).

  • 要发送跨域cookie,您需要设置[withCredentials](https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials)标志 (25认同)
  • 对于跨域方案,需要做三件事: - (1)客户端需要为`xhr`对象设置`withCredentials = true`(2)在OPTIONS预检请求中设置`Access-Control-Allow-Credentials`以及实际请求(3)根据需要设置cookie (5认同)

Phi*_*hil 6

还要检查您的服务器是否在非http请求中设置安全cookie.刚刚发现我的ajax请求正在获得一个带有"安全"设置的php会话.因为我没有使用https,所以它没有发回会话cookie,我的会话正在重置每个ajax请求.