用于 JSF 中"Remember me"的 Cookie



我有一个登录页面,我想添加"记住我"功能;因此,如果用户退出并再次打开页面,他的用户名和密码将被加载。为此,当用户登录时(选中"记住我"),我保存以下cookie:

FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
 ((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(passCokie);

问题是,后来(在同一会话中)我读取cookie,我看到maxAge = -1;即使我把它设置为3600…为什么呢?另一个问题:如果我用userCookie.setSecure(true)设置cookie安全,那么我无法读取它(它消失了)。

另一个问题:既然密码存储在cookie中,我应该如何加密它?什么是最佳实践?

Thanks in advance

问题是,后来(在同一会话中)我读取cookie,我看到maxAge = -1;即使我把它设置为3600…为什么呢?

因为浏览器没有发回maxage。它只返回cookie name=value。maxage仅存储在浏览器中。你可以在浏览器本身的cookie查看器/编辑器中检查它。例如,在Firefox中,你可以通过Tools>选择比;隐私比;删除单个cookie 。输入域(例如localhost)查看cookie

另一个问题:如果我用userCookie.setSecure(true)设置cookie安全,那么我无法读取它(它消失了)。

它只在通过HTTPS而不是HTTP提供请求/响应时起作用。此外,当请求已经通过HTTPS提供时,它已经默认为secure=true。

另一个问题:既然密码存储在cookie中,我应该如何加密它?什么是最佳实践?

不要在两个cookie中存储原始名称/密码。除此之外,这是一个非常糟糕的主意,很容易被破解。使用具有自动生成的长,唯一且不可能猜测的值的单个cookie。将此值与用户ID一起存储在服务器端的数据库中。当有人用这个cookie访问你的网站,但用户还没有登录(即会话中没有User对象),那么你可以做自动登录。

参见:

  • 如何实现"保持登录"?
  • 如何保持用户登录?

相关内容

  • 没有找到相关文章

最新更新