繁体   English   中英

AJAX 无法在 CORS 请求后在浏览器上设置 Cookie。 Set-Cookie 标头仅存在于 FireFox 中,不存在于 Chrome 中

[英]AJAX fails to set Cookies on browser after CORS request. Set-Cookie header is present only in FireFox, not in Chrome

我正在使用 JQuery 向 NodeJS 服务器发送 AJAX 请求,该服务器应该毫无问题地将 cookie 设置回客户端,但事实并非如此。 我可以在响应中看到Set-Cookie标头,但略读document.cookie字符串不包含我的 cookie。 如果有人能看一下这段代码,我将不胜感激。

请求代码:

$.ajax({
   type: "POST",
   url: "https://my-site/mailcamp",
   contentType: "application/json",
   dataType: "json",
   processData:false,
   data: JSON.stringify(reqBody),
   success: function (data) {
      console.log(data);   
   },
   xhrFields: { withCredentials: true },
   crossDomain: true,
})

服务器响应:

app.use('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "https://www.texashunterproducts.com");
  res.header("Access-Control-Allow-Headers", "Origin, x-access-token, x-user-pathway, x-mongo-key, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
  res.header("Access-Control-Allow-Credentials", true);
  next();
});

router.route('/mailcamp')
    .post(async (req, res, next) => {
        try { 
            res.setHeader('Set-Cookie', [`texaspopup=true`]);
            res.cookie("texcookienowpopupnow", "trueasheck")
            res.send("Send me dem cookiez");
        } catch(err) { next(err) }
    })

我只是没有在 document.cookie 中得到这个。 我有一些奇怪的矛盾:

我可以清楚地看到 FireFox 网络选项卡中的Set-Cookie响应标头:

在此处输入图像描述 在此处输入图像描述

然而,它在 Chrome 中完全没有!

在此处输入图像描述

我根本无法在解析document.cookie时找到 cookie。 我复制并粘贴了document.cookie的内容,但无法使用ctrl+f找到我的键/值对。 为什么? 这里发生了什么? 它不应该被隐藏,因为我没有在 cookie 上添加Httponly标记,而是将它直接发送到我正在查询的域。

这是一个愚蠢的问题。 这是第三方 cookie。 虽然它是由外部域设置的,但接收者不能通过 doc.cookies 读取它,只有在浏览到发送 cookie 的域时才能读取。 我最终使用此来源的代码在客户端本地设置 cookie,并发送后续请求以完成服务器操作:

https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM