如何使用AJAX请求设置cookie值?

Aad*_*adi 31 javascript cookies ajax jquery jquery-mobile

我想在AJAX请求上设置cookie值,但下面的代码不起作用.

$.ajax({
    type: "GET",    
    url: "http://example.com",
    cache: false,
    setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl",
    crossDomain: true,
    dataType: 'json',
    success: function (data) {
        alert(data);
    });
Run Code Online (Sandbox Code Playgroud)

如何在标题中设置cookie?

Tom*_*mmi 40

基本上,ajax请求以及同步请求会自动发送您的文档cookie.因此,您需要将cookie设置为文档,而不是请求.但是,您的请求是跨域的,事情变得更加复杂.基于此答案,除了设置文档cookie之外,还应允许其发送到跨域环境:

type: "GET",    
url: "http://example.com",
cache: false,
// NO setCookies option available, set cookie to document
//setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl",
crossDomain: true,
dataType: 'json',
xhrFields: {
    withCredentials: true
},
success: function (data) {
    alert(data);
});
Run Code Online (Sandbox Code Playgroud)

  • 如果我想要,假装一个cookie并发送它而不设置它怎么办?毕竟,cookie只是一个标题,来吧!:) (4认同)
  • @TomášZato 根据 [XHR 规范](http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method) 你不能这样做。(请参阅第 5 点`如果头是不区分大小写的匹配,则终止这些步骤` ... `Cookie` ... `上述头由用户代理控制,以使其控制传输的这些方面。这保证了数据完整性在某种程度上。`)。我相信你仍然可以*伪造* cookie *通过在请求之前设置*它并在`complete`回调中删除。我相信这是我们在浏览器中所能做的最多的事情。 (2认同)