记住几周的用户会话?

时间:2013-07-16 09:01:00

标签: shiro

如果我没记错的话,谷歌等公共服务通常会提供两周的登录流程。

这样,即使关闭标签页,浏览器甚至重新启动操作系统,用户仍然可以作为主题访问网页,而无需重新登录。

问题是:

  1. 要在Apache Shiro中实现这一点,它只是会话超时不是吗,像 globalSessionTimeout ?通过这种方式,会话将被存储并保持活动状态2周,然后自动超出失效状态。
  2. 这是 - - 与Shiro的“记住我”功能相同,其中经过身份验证的被记住是有区别的,对吗?

1 个答案:

答案 0 :(得分:2)

Shiro或Web会话将保留身份验证状态,即,如果用户除了其他状态(会话属性等)之外已经实际证明了他们的身份。

Shiro中的“记住我”功能仅设置一个身份cookie,告诉服务器最终用户可能是谁,但此cookie 保留身份验证状态。 Shiro的文档中清楚地解释了这两种不同方法的原因:Remembered vs. Authenticated

我不确定Google如何实施他们的解决方案,但我相当确定它不是基于会话的。 Google的目标是在可能的情况下成为服务器无状态 - 为GMail维护数百万个会话(例如)是他们可能不会处理的技术开销。 GMail可能会在browser local storage(或某些自定义等效项)中保留身份验证状态,以确保所有状态都在客户端。

无论如何,如果我不得不猜测,它可能会这样:

当您使用服务器进行身份验证时,Google可能会在此时获取有关您和您的计算机的大量信息(时间,IP地址,浏览器信息,用户ID等)并计算加密哈希值(也称为“摘要”)该信息并将哈希值设置为cookie或浏览器本地存储。

下次访问服务器时,他们可能会查看该值,对当前请求中的相关信息执行相同的加密哈希,如果他们计算的哈希值与cookie中的哈希值匹配,则可以确定它仍然是您在特定计算机上,并允许您在不登录的情况下使用该应用程序。

这种行为就像Shiro Remember Me ++。他们记住用户不使用会话的用户,还有其他可以让他们更确定用户确实是他们期望的信息。

要使用Shiro来表示相同的行为,那么是的,您必须将会话时间延长2周。不同之处在于,我对谷歌解决方案的猜测根本不需要任何服务器状态,而会话则可以。

相关问题