等待在location.href重定向

时间:2017-07-11 16:22:39

标签: javascript jquery cookies browser cors

我正在尝试进行跨多个域(我控制)的登录。我的策略是,在成功登录响应后,我发出一个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上运行。

感谢任何帮助。这是我发布的第一个问题,因此对问题礼仪和格式的建设性批评也很感激!

1 个答案:

答案 0 :(得分:0)

我设置了50毫秒的延迟时间window.setTimeout(function() { location.href='';}, 50);,使它有一些空闲时间可以存储到cookie。另外,在隐身窗口中似乎根本不起作用,请关闭所有CORS Cookie。