记住我/保持登录状态,在jsp登录页面

问题描述:

我有一个登录屏幕,我想通过检查数据库中的凭据来验证用户身份。我知道大多数浏览器都可以记住密码,但我如何实现使用浏览器cookie记住我的复选框?我正在使用sign.jsp和Auth servlet(doPost)以及使用https进行基本访问身份验证。记住我/保持登录状态,在jsp登录页面

我知道我需要将userid +令牌存储到cookie中。我从另一个线程发现了以下代码。

在你的servlet响应处理器(doPost方法,的doGet等),创建以下列方式饼干 -

if(remember_me_is_checked) 
{ 
    Cookie c = new Cookie("userid", userId.toString()); 
    c.setMaxAge(24*60*60); 
    response.addCookie(c); // response is an instance of type HttpServletReponse 
} 

读他们,你可以使用这样的事情 -

Cookie[] cookies = request.getCookies();  // request is an instance of type 
              //HttpServletRequest 
boolean foundCookie = false; 

for(int i = 0; i < cookies.length; i++) 
{ 
    Cookie c = cookies[i]; 
    if (c.getName().equals("userid")) 
    { 
     string userId= c.getValue(); 
     foundCookie = true; 
    } 
} 

我问题是,在将用户信息存储到Cookie后,如何在用户下次登录时自动对用户进行签名?我不明白的是,我只有用户的登录ID存储在cookie中,我怎么能没有密码签署用户。我可以使用什么方法?

如果可能,请详细解释或提供一些代码。我对这类东西真的很陌生。

问候

+0

你是什么意思,“我不想通过检查数据库中的凭据来认证用户”? – Lobo 2012-07-16 21:46:30

+0

更具体地说,如果用户名和/或密码与我的数据库中的用户名和/或密码相匹配,我可以使用什么方法来登录用户。 – Joey 2012-07-16 21:59:28

通常我们将令牌存储到cookies中,以确定用户是否登录。 (不要在Cookie中存储密码和其他凭证)。我想建议您使用filter。在doFilter()方法中,读取cookie并基于cookie的值或cookie的可用性,您可以验证请求。

+0

你的建议非常好。但是,如何在成功验证身份后登录用户。我不存储他们的密码。我只是存储用户标识和标记,cookie的值或类似的东西,但不是密码。我可以使用什么方法自动签名。我使用基于容器的表单身份验证。如果我通过自动提交存储在DataBase中的用户名和密码来存储密码,我想我可以感叹他们。如果我不存储他们的密码怎么办?我该怎么办? – Joey 2012-07-19 17:08:09

这是不够的,只存储用户ID在cookie。我看到的最简单的解决方案是存储某种密码散列以及用户标识。

取用户名+ some_secret_string +密码。

计算散列函数。

将用户标识和计算出的散列推送到cookie。

当用户返回时,您将得到2个字符串。

根据用户标识,您将从数据库中获取密码。

再次计算散列函数。

将计算出的散列与来自cookie的散列进行比较。

如果它们匹配 - 用户再次登录。