我有一个登录屏幕,我想通过检查数据库中的凭据来验证用户。我知道大多数浏览器都能记住密码,但是如何使用浏览器cookie实现“记住我”复选框?我正在使用sign.jsp和Auth servlet(doPost)以及使用https进行基本访问身份验证。
我知道我需要将用户ID +令牌存储到cookie中。我从另一个帖子中找到了以下代码。
在你的servlet响应处理程序(doPost,doGet等)中,以下列方式创建一个cookie -
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 :(得分:0)
仅在cookie中存储userid是不够的。我看到的最简单的解决方案是存储某种密码哈希以及用户ID。
使用userid + some_secret_string +密码。
计算出它的哈希函数。
将userid和计算哈希推送到cookie。
当用户返回时,您将获得2个字符串。
根据用户ID,您将从数据库中获取密码。
再次计算哈希函数。
将计算出的哈希值与cookie中的哈希值进行比较。
如果匹配 - 用户再次登录。
答案 1 :(得分:0)
通常我们存储令牌 - 一种状态信息,用于确定是否将用户记录到cookie中。 (不要在cookie中存储密码和其他凭证)。
我建议您使用filter
。在doFilter()方法中读取cookie并根据cookie的值或cookie的可用性,您可以验证请求。