首页 新闻 会员 周边 捐助

jquery ajax post 请求带有 withCredentials 却不发送 cookie

0
悬赏园豆:50 [待解决问题]

遇到奇怪的问题,通过下面的代码发送 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);
    });
dudu的主页 dudu | 高人七级 | 园豆:30757
提问于:2020-06-09 20:07

如果去掉 data: JSON.stringify({ blogId: blogId, id: id }) ,就能发送 cookie

dudu 4年前
< >
分享
所有回答(2)
0

jQuery版本是?

RosonJ | 园豆:4910 (老鸟四级) | 2020-06-09 20:09

確認一下未傳送的cookie 的SameSite 屬性為何
按照新的規則,SameSite=None 才能跨域傳送

支持(1) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2020-06-09 20:14

1.7

支持(0) 反对(0) dudu | 园豆:30757 (高人七级) | 2020-06-09 21:02

@RosonJ: 如果去掉 data: JSON.stringify({ blogId: blogId, id: id }) 就能发送 cookie

支持(0) 反对(0) dudu | 园豆:30757 (高人七级) | 2020-06-09 21:06

@RosonJ: SameSite 设置的是 Unspecified

options.Cookie.SameSite = SameSiteMode.Unspecified
支持(0) 反对(0) dudu | 园豆:30757 (高人七级) | 2020-06-09 21:12

@dudu:
我試了去掉data、cookie SameSite=None 都沒用
得再試試

支持(0) 反对(0) RosonJ | 园豆:4910 (老鸟四级) | 2020-06-10 09:19

@RosonJ: 我这里去掉 data 是可以的,所跨域请求的服务端需要允许 CORS

支持(0) 反对(0) dudu | 园豆:30757 (高人七级) | 2020-06-10 09:27
0

请求头的原因吗Content-Type: application/x-www-form-urlencoded

ly0316 | 园豆:202 (菜鸟二级) | 2020-08-10 10:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册