记住我/保持登录状态,在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中,我怎么能没有密码签署用户。我可以使用什么方法?
如果可能,请详细解释或提供一些代码。我对这类东西真的很陌生。
问候
通常我们将令牌存储到cookies中,以确定用户是否登录。 (不要在Cookie中存储密码和其他凭证)。我想建议您使用filter
。在doFilter()方法中,读取cookie并基于cookie的值或cookie的可用性,您可以验证请求。
你的建议非常好。但是,如何在成功验证身份后登录用户。我不存储他们的密码。我只是存储用户标识和标记,cookie的值或类似的东西,但不是密码。我可以使用什么方法自动签名。我使用基于容器的表单身份验证。如果我通过自动提交存储在DataBase中的用户名和密码来存储密码,我想我可以感叹他们。如果我不存储他们的密码怎么办?我该怎么办? – Joey 2012-07-19 17:08:09
这是不够的,只存储用户ID在cookie。我看到的最简单的解决方案是存储某种密码散列以及用户标识。
取用户名+ some_secret_string +密码。
计算散列函数。
将用户标识和计算出的散列推送到cookie。
当用户返回时,您将得到2个字符串。
根据用户标识,您将从数据库中获取密码。
再次计算散列函数。
将计算出的散列与来自cookie的散列进行比较。
如果它们匹配 - 用户再次登录。
你是什么意思,“我不想通过检查数据库中的凭据来认证用户”? – Lobo 2012-07-16 21:46:30
更具体地说,如果用户名和/或密码与我的数据库中的用户名和/或密码相匹配,我可以使用什么方法来登录用户。 – Joey 2012-07-16 21:59:28