我正在尝试进行跨多个域(我控制)的登录。我的策略是,在成功登录响应后,我发出一个CORS请求,以获取每个其他所需域的cookie。在返回cookie时,我会重定向到用户的主页(可能位于任何域中)
如果我注释掉重定向,我发现一切正常:所有CORS cookie都已设置,我在其他域登录。但是,当我重定向时,有时不会设置CORS cookie。以下是客户端代码的一般概念:
// This is running client side when the user visits "A.com/index.html"
// PLEASE NOTE: the distinction between A.com and B.com is important
$.post('https://A.com/attemptLogin', function(data) {
if (!data.success) { return; }
var token = data.loginToken;
var userURL = data.userURL; // userURL may be in A.com or B.com...
// now get a cookie at the alternate domain B.com
$.ajax({
url: 'http://B.com/getDomainCookie/' + token,
method: 'GET',
xhrFields: { withCredentials: true },
success: function() {
// if I comment out the next line, the cookie is always set successfully
// if I leave the line in, it is hit or miss whether the cookie is set.
location.href = userURL;
}
});
});
我的猜测是,在浏览器完成设置cookie之前触发了ajax回调,这可能与它是B.com cookie有关,并且此代码在A.com上运行。
感谢任何帮助。这是我发布的第一个问题,因此对问题礼仪和格式的建设性批评也很感激!
答案 0 :(得分:0)
我设置了50毫秒的延迟时间window.setTimeout(function() { location.href='';}, 50);
,使它有一些空闲时间可以存储到cookie。另外,在隐身窗口中似乎根本不起作用,请关闭所有CORS Cookie。