2013-04-23 79 views
0

我有一个域domain1.com。用户登录并设置cookie。这是使用Django会话完成的。Django会话cookie:从(任何)其他域,检查用户是否登录

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

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

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

编辑:

我试图解决的真正问题? (重新评论如下):我创建了一个Chrome扩展。当用户按下来自domain2的扩展图标时,将运行一个JavaScript,它从页面收集信息。这些信息需要发送到域1上的用户帐户。请注意,domain2可以是任何域,不是我创建的域。

我尝试使用AJAX和cookie。从domain1的

集饼干:

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" 域2

调用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是一个真正的域。这可能是问题吗?它确实调用了该函数。

+1

您尝试在此处解决的实际问题是什么? – 2013-04-23 07:31:30

+0

你可能想看看openId或oauth解决方案,这里是一个关于跨浏览器会话的优秀帖子(http://dustinfarris.com/2012/2/sharing-django-users-and-sessions-across-projects/ ) – 2013-04-23 07:43:15

+0

请不要完全改变问题,以便现在的答案无关紧要!改为提出一个新问题。 – 2013-04-23 13:04:02

回答

0

Cookie是域特定的,您可以在foo.example.com和bar.example.com之间共享cookie,但不能在两个域之间共享cookie。为了解决这个问题,你需要发送一个从域2到域1的Ajax请求,然后检查cookie是否被设置,并将响应发送回域2。

选中此所以为参考问: Setting default cookie domain for Django site with multiple domain names

+0

我试着从domain2发送ajax请求到domain2,但它不工作。我编辑了我的答案,以显示我的尝试。请注意,domain2可以是任何域,不是我创建的域。 – user984003 2013-04-23 10:53:37

+0

它应该是一个jsonp请求,使跨浏览器ajax请求工作 – codefreak 2013-04-23 12:51:03

1

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

编号Cookie仅限于域(及其子域)。 .foo.com的Cookie可通过www.foo.com,zoo.foo.com访问,但不可访问bar.com

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

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

此外,用户最初可能已从Chrome登录到域1, ,但现在他们正从另一个浏览器访问域2。是不是 饼干浏览器具体?

是的,他们是。如果您已登录Chrome,并且您打开Safari,则您将不会登录。

+0

如何让ajax调用工作?我已经通过回答编辑来显示我所尝试过的。 – user984003 2013-04-23 10:44:42