我使用的是OpenID。如何使用户在关闭浏览器窗口后长时间保持登录状态?
如何存储和访问用户的User
对象?
基本上,我想我只是不太理解会话在Java中是如何工作的。
发布于 2010-02-03 01:12:27
所以你真的想要一个“在这台电脑上记住我”的选项?这实际上与OpenID部件无关。以下是一种与语言无关的方法:
cookie_id
和user_id
列的DB表。如有必要,还要添加cookie_ttl
和ip_lock
。我想列名不言而喻。cookie_id
的长的、唯一的、难以猜测的密钥(与用户无关),并将其与user_id
一起存储在数据库中。将cookie_id
存储为具有已知cookie名称的cookie的Cookie值,例如remember
。延长cookie的生命周期,例如一年。remember
关联的Cookie值cookie_id
。如果它在那里并且根据数据库是有效的,则自动登录与user_id
关联的用户,并再次推迟cookie期限,如果有的话,数据库中的cookie_ttl
也是如此。在Java/JSP/Servlet术语中,使用HttpServletResponse#addCookie()
添加cookie,使用HttpServletRequest#getCookies()
获取cookie。您可以在监听所需资源的Filter
中执行所有的第一次检查,例如/*
或更受限制的资源。
关于会话,这里不需要它。它的生命周期比你需要的要短。只有在拥有有效的remember
cookie时,才能使用它来放置已登录用户或“找到”的用户。这样,Filter
就可以只检查它在会话中的存在,而不需要每次都检查cookies。
毕竟,这是相当直接的。祝好运。
另请参阅:
发布于 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文档的方法。
https://stackoverflow.com/questions/2185951
复制相似问题