2

我有一个登录屏幕,我想通过检查数据库中的凭据来验证用户。我知道大多数浏览器都可以记住密码,但是如何使用浏览器 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;
    }
} 

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

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

此致

4

2 回答 2

0

仅在 cookie 中存储用户 ID 是不够的。我看到的最简单的解决方案是将某种密码哈希与用户 ID 一起存储。

取用户 ID + some_secret_string + 密码。

从中计算哈希函数。

将用户 ID 和计算的哈希推送到 cookie。

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

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

再次计算哈希函数。

将计算的哈希值与 cookie 中的哈希值进行比较。

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

于 2012-07-16T21:48:34.857 回答
0

通常,我们将令牌(用于确定用户是否登录的状态信息)存储到 cookie 中。(不要在 cookie 中存储密码和其他凭据)。

我想建议你使用filter. 在 doFilter() 方法中读取 cookie 并根据 cookie 的值或 cookie 的可用性,您可以验证请求。

于 2012-07-17T01:30:04.450 回答