如何使用 AJAX 请求设置 cookie 值?
Posted
技术标签:
【中文标题】如何使用 AJAX 请求设置 cookie 值?【英文标题】:How to set cookie value with AJAX request? 【发布时间】:2021-12-28 23:34:16 【问题描述】:我想在 AJAX 请求上设置一个 cookie 值,但下面的代码不起作用。
$.ajax(
type: "GET",
url: "http://example.com",
cache: false,
setCookies: "lkfh89asdhjahska7al446dfg5kgfbfgdhfdbfgcvbcbc dfskljvdfhpl",
crossDomain: true,
dataType: 'json',
success: function (data)
alert(data);
);
如何在标头中设置 cookie?
【问题讨论】:
设置中根本没有setCookies
选项。
你想做什么..?
你应该在javascript中设置cookie,然后发送请求。标头将包含您在 ajax 请求中的 cookie。使用这些函数在 JS 中设置和获取 cookie:w3schools.com/js/js_cookies.asp
【参考方案1】:
基本上,ajax 请求以及同步请求会自动发送您的文档 cookie。因此,您需要将 cookie 设置为文档,而不是请求。但是,您的请求是跨域的,事情变得更加复杂。基于this answer,另外设置文档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);
);
【讨论】:
如果我想在某种程度上伪造一个 cookie 并在不设置的情况下发送它呢?毕竟,cookie 只是一个标题,来吧! :) @TomášZato 根据XHR specs 你不能这样做。 (见第 5 点Terminate these steps if header is a case-insensitive match
... Cookie
... The above headers are controlled by the user agent to let it control those aspects of transport. This guarantees data integrity to some extent.
)。我相信你仍然可以伪造一个cookie在请求之前设置它并在complete
回调中删除。我相信这是我们在浏览器中能做的最多的事情。
其实我只是提醒自己javascript是单线程的,所以设置cookie然后删除它不会对其他脚本产生负面影响。以上是关于如何使用 AJAX 请求设置 cookie 值?的主要内容,如果未能解决你的问题,请参考以下文章