限制Google帐户中用户的单个会话

时间:2010-06-02 12:21:45

标签: java google-app-engine account

是否可以强制谷歌仅为单个用户创建一个会话?

我在GAE中创建了使用google id对用户进行身份验证的服务。 现在,单个用户通过共享从多台PC创建多个会话 他的用户名/密码。我想限制这个。

成功登录后,应用简单语言,应该注销所有其他语言 该用户的会话。

在gmail中,页面底部有一个链接,名称是最后一个活动详细信息。 在单击详细信息时,它显示当前会话,并提供注销其他会话的选项 会话。我想以编程方式提供相同的功能。

还有一个选项:登录之前检测用户是否已经登录 上?

看看这个

http://mail.google.com/support/bin/answer.py?ctx=%67mail&answer=45938

参见并发会话

如果可以通过某种方式访问​​此信息,我可以采取适当的措施。

2 个答案:

答案 0 :(得分:3)

这当然是可能的。

如果您使用Google帐户进行身份验证,则用户会通过将其凭据发布到Google来登录,Google会向您的网站返回一个身份验证令牌,然后将其作为Cookie存储在用户的浏览器中。在cookie过期(默认为24小时)或用户注销之前,令牌是好的。

如果要跟踪多个登录会话,可以编写设计为在登录或注销后运行的处理程序。如果您的正常登录后返回URL是“/ do_stuff”,您可以将其更改为“/ finish_login?next =%2Fdo_stuff”。在该处理程序中,您可以在表示会话的数据存储区中创建一个实体,其中包含对Google帐户的引用,登录的IP地址以及登录时间戳(当前时间戳)。您可以将会话实体密钥写入用户浏览器中的另一个cookie。完成后,重定向到“下一个”网址。

注销后,您可以使用类似的处理程序来检查会话实体密钥cookie,删除实体并删除co​​okie。

如果您想向用户显示他们是从多个位置登录的,请查询与其Google帐户关联的会话实体,这些会话实体的时间少于24小时(或者您的Cookie过期时间设置为)。

如果您想远程注销其他会话,您可能需要编写自己的版本,该版本是Google在webapp.util中提供的login_required装饰器。您的版本需要验证用户是否已登录,验证是否已发送会话密钥cookie,并验证关联实体是否仍然存在并且由正确的帐户拥有。

答案 1 :(得分:2)

没有什么可以阻止您在Google App Engine数据服务中存储登录详细信息。 因此,您可以将用户的所有登录详细信息存储在其关联对象中。因此,我认为GAE和传统的Web应用程序没有区别 - 除了您将登录信息存储在数据库中,而不是让您的Web前端处理它。