1

我有一个域 domain1.com。用户登录并设置 cookie。这是使用 Django 会话完成的。

然后我转到另一个域 domain2.com。此域运行 javascript。从这个javascript,我想看看用户是否登录到domain1.com。

这可能吗?我可以从 domain2 中看到属于 domain1 的 cookie 吗?或者我可以通过 ajax 以某种方式调用 domain1 来检查用户是否已登录?

此外,用户可能最初从 Chrome 登录到 domain1,但现在他们正在从另一个浏览器访问 domain2。cookie 不是特定于浏览器的吗?

编辑:

我要解决的真正问题是什么?(下面重新评论):我创建了一个 Chrome 扩展程序。当用户从 domain2 按下扩展图标时,将运行一个 javascript,它从页面收集信息。此信息需要发送到 domain1 上的用户帐户。请注意,domain2 可以是任何域,而不是我创建的域。

我对 AJAX 和 cookie 的尝试。

从 domain1 设置 cookie:

response.set_cookie("user_cookie", value="somevalue", max_age=60*60, expires=None, path='/', domain=None, secure=None, httponly=False)

创建 Python 函数,从 domain1.com/checklogin 执行:

@csrf_exempt
def is_logged_in(request):
    cookie = request.COOKIES.get('user_cookie') 
    if cookie is not None:
        return HttpResponse("1")
    else:
        return HttpResponse("0") 

转到 domain1.com/checklogin -> 响应为“1”

从 domain2 调用 javascript,如下所示:

var xmlHttp_1=new XMLHttpRequest();
xmlHttp_1.open("POST","http://domain1.com/checklogin/",false);
xmlHttp_1.send();
alert(xmlHttp_1.responseText);

这里的响应错误地是 0。它看不到由 domain1 创建的 cookie。

请注意,此时 domain1 是 localhost 而 domain2 是一个真实的域。这可能是问题吗?它确实正确调用了该函数。

4

2 回答 2

2

这可能吗?我可以看到属于domain1from 的 cookiedomain2吗?

不可以。Cookie 仅限于域(及其子域)。的 cookie.foo.com可以访问www.foo.comzoo.foo.com但不能访问bar.com

或者我可以通过 ajax 以某种方式拨打电话domain1以检查用户是否已登录?

这是一种方法,是的,它会起作用。

此外,用户可能最初从 Chrome 登录到 domain1,但现在他们正在从另一个浏览器访问 domain2。cookie 不是特定于浏览器的吗?

对,他们是。如果您登录 Chrome,然后打开 Safari,您将不会登录。

于 2013-04-23T07:31:15.763 回答
1

cookie 是特定于域的,您可以在 foo.example.com 和 bar.example.com 之间共享 cookie,但不能在两个域之间共享。要解决此问题,您需要将 ajax 请求从域 2 发送到域 1,并在那里检查是否设置了 cookie 并将响应发送回域 2。

检查此问题以供参考: 为具有多个域名的 Django 站点设置默认 cookie 域

于 2013-04-23T07:29:18.257 回答