我有两个域名:domain1.com,domain2.com。当用户打开domain1 js脚本时,cors请求domain2.com并返回简单的字符串响应。当js脚本收到响应时,它会设置cookie COOKIE_NAME =响应文本。当我分析domain1的访问日志时,我只有40%的会话cookie COOKIE_NAME设置了。
为什么cookie没有设置在60%的会话中?
此代码不支持IE,因为IE用户占我们用户的1%。 代码:
var DONE = (typeof XMLHttpRequest.DONE !== 'undefined') ? XMLHttpRequest.DONE : 4;
document.addEventListener('DOMContentLoaded', updateCookie);
function updateCookie() {
var value = getCookie(COOKIE_NAME);
if (typeof value !== 'undefined') {
return;
}
var xhr = new XMLHttpRequest();
try {
xhr.open('GET', DOMAIN2, true);
xhr.withCredentials = true;
xhr.onreadystatechange = function () {
if (xhr.readyState !== DONE) {
return;
}
if (xhr.status === 200) {
var value = xhr.responseText;
setCookie(COOKIE_NAME, value, COOKIE_LIFE_TIME);
}
};
xhr.send();
}
function getCookie(name) {
var matches = document.cookie.match(new RegExp(
"(?:^|; )" + name.replace(/([.$?*|{}()\[\]\\\/+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
function setCookie(name, value, expires) {
if (typeof expires === "number" && expires) {
var date = new Date();
date.setTime(date.getTime() + expires * 1000);
expires = date;
}
if (expires && expires.toUTCString) {
expires = expires.toUTCString();
}
value = encodeURIComponent(value);
var updatedCookie = name + "=" + value;
updatedCookie += "; path=/; " + "expires=" + expires;
document.cookie = updatedCookie;
}
答案 0 :(得分:0)
经过研究,我得知有几个原因导致问题: