如何在不同的浏览器页面中管理多个帐户登录和注销?

时间:2010-03-02 03:15:07

标签: java google-app-engine login authentication

我有一个基于App Engine(Java)构建的网站,需要用户使用Google帐户登录。

情况是:

  1. 用户Adam拥有多个帐户。
  2. 用户Adam使用帐户 Adam1 登录并在浏览器页面A中获取 Adam1 数据。
  3. 他点击了退出链接,但在另一个标签页B(当然是同一个浏览器)
  4. 中打开了它
  5. 他在浏览器页面B中使用另一个帐户 Adam2 登录,显示他的 Adam2 数据。
  6. 然后他返回浏览器页面A并对其数据进行了一些更改,然后发送到服务器,此时我的应用程序将识别当前用户是 Adam2 ,并且将对其进行更改 Adam2 ,它与当前页面A的状态不匹配,我们的用户可能会感到困惑。
  7. 我想也许我可以在向服务器发出更改请求时附加userID参数,服务器端会将当前用户ID与此userID参数进行比较以处理更改请求,或者返回刷新命令以使其超出如果ID不相同,则将日期页面刷新到当前帐户。

    处理这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

在表单上放置一个隐藏字段,它是会话ID和用户ID的组合哈希值。当您的服务器处理请求时,请仔细检查与请求一起发送的组合哈希是否与您期望的一致。如果用户或会话错误,则哈希将不匹配,您可以适当地报告错误。

答案 1 :(得分:1)

据推测,用户将通过作为Cookie信息发送的会话ID来识别。由于登录的不同,站点A上的Adam将具有与站点B上的Adam不同的会话ID。也可能是表单页面将受到保护,以便用户需要登录才能访问它。

当Adam在页面B上注销时,旧会话在服务器上被销毁,登录失效。当Adam从页面A提交表单时,浏览器不知道这已经发生,并且将提交表单和旧的会话ID。由于会话已经过期,服务器将(应该)拒绝此提交。

因此,在正确编码的会话/用户管理系统中,这成为一个无问题。关键点是在注销时更新/无效会话ID。

相关问题