Django会话cookie:来自(任何)其他域,检查用户是否已登录

时间:2013-04-23 07:22:27

标签: django session

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

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

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

此外,用户最初可能已从Chrome登录到domain1,但现在他们正在从其他浏览器访问domain2。是不是特定于Cookie浏览器?

编辑:

我想解决的真正问题是什么? (下面评论):我创建了一个Chrome扩展程序。当用户从domain2按下扩展图标时,将运行javascript,该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是真实域。这可能是问题吗?它可以正确调用该函数。

2 个答案:

答案 0 :(得分:1)

  

这可能吗?我可以看到属于domain1的Cookie吗?   domain2

没有。 Cookie仅限于域(及其子域)。 .foo.comwww.foo.com可以访问zoo.foo.com的Cookie,但不能访问bar.com

  

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

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

  

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

是的,他们是。如果您已登录Chrome,并且您打开了Safari,则无法登录。

答案 1 :(得分:0)

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

检查这个问题以供参考: Setting default cookie domain for Django site with multiple domain names