首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让用户登录我的网站几个月?

如何让用户登录我的网站几个月?
EN

Stack Overflow用户
提问于 2010-02-03 00:57:21
回答 2查看 10.5K关注 0票数 17

我使用的是OpenID。如何使用户在关闭浏览器窗口后长时间保持登录状态?

如何存储和访问用户的User对象?

基本上,我想我只是不太理解会话在Java中是如何工作的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-03 01:12:27

所以你真的想要一个“在这台电脑上记住我”的选项?这实际上与OpenID部件无关。以下是一种与语言无关的方法:

  • 首先创建一个至少包含cookie_iduser_id列的DB表。如有必要,还要添加cookie_ttlip_lock。我想列名不言而喻。

  • 在第一次登录时(如果有必要,仅在选中“记住我”选项的情况下),会生成一个代表cookie_id的长的、唯一的、难以猜测的密钥(与用户无关),并将其与user_id一起存储在数据库中。将cookie_id存储为具有已知cookie名称的cookie的Cookie值,例如remember。延长cookie的生命周期,例如一年。

  • 对于每个请求,检查用户是否已登录。如果不是,则检查与cookie名称remember关联的Cookie值cookie_id。如果它在那里并且根据数据库是有效的,则自动登录与user_id关联的用户,并再次推迟cookie期限,如果有的话,数据库中的cookie_ttl也是如此。

在Java/JSP/Servlet术语中,使用HttpServletResponse#addCookie()添加cookie,使用HttpServletRequest#getCookies()获取cookie。您可以在监听所需资源的Filter中执行所有的第一次检查,例如/*或更受限制的资源。

关于会话,这里不需要它。它的生命周期比你需要的要短。只有在拥有有效的remember cookie时,才能使用它来放置已登录用户或“找到”的用户。这样,Filter就可以只检查它在会话中的存在,而不需要每次都检查cookies。

毕竟,这是相当直接的。祝好运。

另请参阅:

票数 34
EN

Stack Overflow用户

发布于 2010-02-03 02:16:14

嗯,我最初选择OpenID的原因是为了让其他人可以替我处理身份验证的实现和安全性。

在研究了OpenID more之后,似乎有一种叫做“立即请求”(http://openid.net/specs/openid-authentication-2_0.html#anchor28)的东西。

当请求身份验证时,依赖方可以请求OP不与最终用户交互。在这种情况下,OP必须立即响应,要么断言身份验证成功,要么响应指示在没有进一步的用户交互的情况下无法完成请求。

正因为如此,我认为我可以将用户的openID url存储在cookie中,并使用一个即时请求来查看该用户是否通过了身份验证。这样,我就不必对我的数据库做任何事情,也不必实现任何逻辑来防止长时间cookie的会话劫持。

这种方法似乎就是OpenID建议的处理Relying Party Best Practices文档的方法。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2185951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档