1

如果我没记错的话,像谷歌这样的公共服务通常会提供两周内避免登录过程的能力。

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

问题是:

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

1 回答 1

2

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

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

我不确定 Google 如何实施他们的解决方案,但我相当肯定它不是基于会话的。谷歌的目标是尽可能地实现服务器无状态——例如为 GMail 维护数百万个会话是他们可能宁愿不处理的技术开销。GMail 可能会在浏览器本地存储(或某些自定义等效项)中保留身份验证状态,以确保所有状态都在客户端中。

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

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

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

这种行为就像 Shiro Remember Me ++。他们在不使用会话的情况下记住用户是谁,而且还可以记住其他信息,这些信息可以让他们更加确定用户确实是他们所期望的人。

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

于 2013-07-18T16:50:17.957 回答