如何让用户login我的网站几个月?

我正在使用OpenID。 我怎样才能让用户在closures浏览器窗口后长时间保持login?

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

基本上,我想我真的不明白会话如何在Java中工作。

所以你真的想要像“在这台电脑上记住我”选项? 这实际上与OpenID部分无关。 这是一个语言不可知的方式,你可以做到这一点:

  • 首先创build一个至less包含cookie_iduser_id列的数据库表。 如果有必要还添加一个cookie_ttlip_lock 。 列名自己说话我猜。

  • 在首次login时(如果需要,只有在选中“记住我”选项时), 生成一个长的,唯一的,难以猜测的密钥(与用户无关),代表cookie_id并将其存储DB和user_id 。 将cookie_id存储为已知cookie名称的cookie的cookie值,例如remember 。 给cookies长寿,例如一年。

  • 在每个请求上,检查用户是否login。如果不是,请检查与Cookie名称相关联的cookie值cookie_id 。 如果它存在并且根据数据库有效,那么会自动login与user_id相关联的用户,并再次推迟cookie的年龄,如果有的话,还会在DB中cookie_ttl

在Java / JSP / Servlet术语中,利用HttpServletResponse#addCookie()添加一个cookie和HttpServletRequest#getCookies()来获取cookie。 你可以做所有的首次检查在一个Filter ,听取所需的资源,例如/*或者更多的限制。

关于会议,你不需要在这里。 它的寿命比你需要的要短。 只有使用它才能将已login的用户或具有有效remember Cookie的“已find”用户。 通过这种方式, Filter可以在会话中检查其存在,然后不需要每次都检查cookie。

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

也可以看看:

  • 当用户login到Web应用程序时如何实现“保持login状态”
  • servlets如何工作? 实例化,会话,共享variables和multithreading

那么,我selectOpenID的原因是,其他人可以为我处理尽可能多的身份validation和安全性。

看了OpenID后,似乎有一种叫做“立即请求”( http://openid.net/specs/openid-authentication-2_0.html#anchor28 )。

当请求authentication时,依赖方可以请求OP不与最终用户交互。 在这种情况下,OP必须立即响应一个authentication成功的断言,或者一个响应,指示在没有进一步用户交互的情况下请求不能被完成。

因此,我认为我可以将用户的openID url存储在cookie中,并使用立即请求来查看用户是否被authentication。 这样我就不必对数据库做任何事情,也不需要执行任何逻辑来防止会话劫持长期存在的cookie。

这样做的方法似乎是OpenIDbuild议使用他们的依赖方最佳实践文档的方式。