如果我没记错的话,像谷歌这样的公共服务通常会提供两周内避免登录过程的能力。
这样,即使标签页关闭、浏览器甚至操作系统重启,用户仍然可以作为主题访问网页,而无需重新登录。
问题是:
- 要在 Apache Shiro 中实现这一点,它只是关于会话超时,不是吗,比如globalSessionTimeout?通过这种方式,会话将被存储并保持活动状态 2 周,然后才会因不活动而自行超时。
- 这 -不- 与Shiro的“记住我”功能相同,其中身份验证和记忆是有区别的,对吗?
如果我没记错的话,像谷歌这样的公共服务通常会提供两周内避免登录过程的能力。
这样,即使标签页关闭、浏览器甚至操作系统重启,用户仍然可以作为主题访问网页,而无需重新登录。
问题是:
Shiro 或 Web 会话将保留身份验证状态,即,如果用户除了其他状态(会话属性等)之外,还实际证明了他们的身份。
Shiro 中的“记住我”功能只设置了一个身份 cookie,告诉服务器最终用户可能是谁,但这个 cookie不保留身份验证状态。Shiro 的文档中清楚地解释了这两种不同方法的原因:Remembered vs. Authenticated。
我不确定 Google 如何实施他们的解决方案,但我相当肯定它不是基于会话的。谷歌的目标是尽可能地实现服务器无状态——例如为 GMail 维护数百万个会话是他们可能宁愿不处理的技术开销。GMail 可能会在浏览器本地存储(或某些自定义等效项)中保留身份验证状态,以确保所有状态都在客户端中。
无论如何,如果我不得不猜测,它可能是这样的:
当您向服务器进行身份验证时,Google 可能会获取当时有关您和您的计算机的大量信息(时间、IP 地址、浏览器信息、用户 ID 等)并计算该信息的加密哈希(又名“摘要”)并将哈希值设置为 cookie 或浏览器本地存储。
下次访问服务器时,他们可能会查看该值,对当前请求中的相关信息执行相同的加密哈希,如果他们计算的哈希与 cookie 中的哈希匹配,他们可以确定它是仍然您在特定的计算机上,并允许您在不登录的情况下使用该应用程序。
这种行为就像 Shiro Remember Me ++。他们在不使用会话的情况下记住用户是谁,而且还可以记住其他信息,这些信息可以让他们更加确定用户确实是他们所期望的人。
要使用 Shiro 近似相同的行为,那么是的,您必须将会话时间延长 2 周。不同之处在于,我对 Google 解决方案的猜测根本不需要任何服务器状态,而 Sessions 则需要。