我有域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是真实域。这可能是问题吗?它可以正确调用该函数。
答案 0 :(得分:1)
这可能吗?我可以看到属于
domain1
的Cookie吗?domain2
?
没有。 Cookie仅限于域(及其子域)。 .foo.com
,www.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