AJAX CORS 请求后无法在浏览器上设置 Cookie。 Set-Cookie header 仅存在于 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
headers,但略读 document.cookie
字符串不包含我的 cookies!如果有人能看一下这段代码,我将不胜感激。
请求代码:
$.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
响应 header:
然而,Chrome!
中完全没有
我在解析 document.cookie
时根本找不到 cookie。我复制并粘贴了 document.cookie
的内容,但无法使用 ctrl+f
找到我的 key/value 对。为什么?这里发生了什么?它不应该被隐藏,因为我没有在 cookie 上添加 Httponly
标记,而是直接将它发送到我正在查询的域。
这是一个愚蠢的问题。这是第三方 cookie。虽然它是由外部域设置的,但接收者无法通过 doc.cookies 读取它,只有在浏览到发送 cookie 的域时才能读取。我最终使用此来源的代码在客户端本地设置 cookie,并发送后续请求以完成服务器操作:
https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework
我正在使用 JQuery 向 NodeJS 服务器发送 AJAX 请求,该服务器应该毫无问题地将 cookie 设置回客户端,但事实并非如此。我可以在响应中看到 Set-Cookie
headers,但略读 document.cookie
字符串不包含我的 cookies!如果有人能看一下这段代码,我将不胜感激。
请求代码:
$.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
响应 header:
然而,Chrome!
中完全没有我在解析 document.cookie
时根本找不到 cookie。我复制并粘贴了 document.cookie
的内容,但无法使用 ctrl+f
找到我的 key/value 对。为什么?这里发生了什么?它不应该被隐藏,因为我没有在 cookie 上添加 Httponly
标记,而是直接将它发送到我正在查询的域。
这是一个愚蠢的问题。这是第三方 cookie。虽然它是由外部域设置的,但接收者无法通过 doc.cookies 读取它,只有在浏览到发送 cookie 的域时才能读取。我最终使用此来源的代码在客户端本地设置 cookie,并发送后续请求以完成服务器操作:
https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework