遇到奇怪的问题,通过下面的代码发送 ajax 请求,总是不发送 cookie ,请问如何解决?
$.ajax({
url: "跨域url",
data: JSON.stringify({ blogId: blogId, id: id }),
type: "post",
contentType: "application/json; charset=utf-8",
dataType: "json",
xhrFields: {
withCredentials: true
},
success: function (data) {
}
});
改用 fetch 实现也是同样的问题
async function postData(url = '', data = {}) {
const response = await fetch(url, {
method: 'POST',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
referrerPolicy: 'no-referrer',
body: JSON.stringify(data)
});
return response.json();
}
postData('https://audit.cnblogs.com/blogposts/pass/one', { blogId: blogId, id: id })
.then(data => {
//...
})
.catch((error) => {
console.error('Error:', error);
});
jQuery版本是?
確認一下未傳送的cookie 的SameSite 屬性為何
按照新的規則,SameSite=None 才能跨域傳送
1.7
@RosonJ: 如果去掉 data: JSON.stringify({ blogId: blogId, id: id })
就能发送 cookie
@RosonJ: SameSite 设置的是 Unspecified
options.Cookie.SameSite = SameSiteMode.Unspecified
@dudu:
我試了去掉data、cookie SameSite=None 都沒用
得再試試
@RosonJ: 我这里去掉 data 是可以的,所跨域请求的服务端需要允许 CORS
请求头的原因吗Content-Type: application/x-www-form-urlencoded
如果去掉
– dudu 4年前data: JSON.stringify({ blogId: blogId, id: id })
,就能发送 cookie