如何让用户login我的网站几个月?
我正在使用OpenID。 我怎样才能让用户在closures浏览器窗口后长时间保持login?
如何存储和访问用户的User
对象?
基本上,我想我真的不明白会话如何在Java中工作。
所以你真的想要像“在这台电脑上记住我”选项? 这实际上与OpenID部分无关。 这是一个语言不可知的方式,你可以做到这一点:
-
首先创build一个至less包含
cookie_id
和user_id
列的数据库表。 如果有必要还添加一个cookie_ttl
和ip_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议使用他们的依赖方最佳实践文档的方式。