使用 cookie/会话存储用户名、密码 - Java Servlets [关闭]

Posted

技术标签:

【中文标题】使用 cookie/会话存储用户名、密码 - Java Servlets [关闭]【英文标题】:Storing username, pasword using cookies/sessions - Java Servlets [closed] 【发布时间】:2014-11-30 03:57:48 【问题描述】:

我正在尝试使用 servlet 创建一个注册页面。我创建了一个基本的 html 页面,其中包含一个输入用户名和密码的表单。现在我需要做的是使用 cookie/会话存储提交到表单的信息。然后在登录页面上,用户必须能够使用他们之前提供的信息登录。 所以基本上我需要知道如何存储用户名和密码。

因此,如果我使用用户名:admin 和密码 123 注册,然后使用用户名:user 和密码:12345 进行注册,我应该无法使用 admin 和 12345 或 user 和 123 登录。谢谢!

HTML 表单

   <html>
    <head>
        <title>Registration</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body bgcolor="lightblue">

    <center>
        <h1></h1>
        <br>

        <hr>
        <br><br>
        <form action="/Registration" method="get">
            <h3> Please register to start </h3>
Username: <input type="text" name="userName">
<br>
Password: <input type="password" name="password">
<br>
<br>
<input type="submit" value="Register">
<br><br>
</form>
    </center>
    </body>
</html>

JAVA SERVLET

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException 
        processRequest(request, response);

         // Create cookies for first and last names.      
      Cookie userName = new Cookie("userName",
                      request.getParameter("userName"));
      Cookie password = new Cookie("password",
                      request.getParameter("password"));

       // Set expiry date after 24 Hrs for both the cookies.
      userName.setMaxAge(60*60*24); 
      password.setMaxAge(60*60*24); 

      // Add both the cookies in the response header.
      response.addCookie( userName );
      response.addCookie( password );

【问题讨论】:

欢迎来到 Stack Overflow。这个网站是针对具体的问题和具体的答案。您给了我们一个相当高级别的要求和一堵代码墙,这与本网站无关。你应该阅读一些教程,试一试,如果你有一个特定的问题,你可以在这里提问。一个警告:任何与安全有关的事情都是棘手的,做错的后果是相当严重的,所以你最好使用一个为你处理它的框架。 【参考方案1】:

Cookie 存储在客户端,并随每个请求一起发送到服务器。在 cookie 中添加密码并不是一个好习惯,因为它们很容易被拦截,并且在许多情况下即使在用户离开网站后仍会留在用户浏览器中。

您应该依赖会话,Java EE 允许您与用户创建会话,其中将存储会话 ID,然后随每个请求一起发送。您可以将有关该用户的信息存储在服务器上。

在此处使用您的代码是创建会话的方法。

// get the session, add argument `true` to create a session if one is not yet created.
HttpSession session = request.getSession(true);

session.setAttribute("userName", request.getParameter("userName"));
session.setAttribute("password", request.getParameter("password"));

// to get the username and password
String userName = session.getAttribute("userName");
String password = session.getAttribute("password");

当然,如果您在清除服务器缓存时这样做,用户名和密码将被删除。服务器缓存中的未加密密码也肯定存在安全问题。


编辑:

如果 2 个人使用同一台计算机,那么不,上面的代码将无法正常工作。这是因为用户凭据只存储在会话中,会话被销毁或会话中的数据被覆盖后,没有任何东西可以保留。想象一下会话是一个直接绑定到每个用户的对象。所以现在我在 *** 上,在他们的代码中某处有一个专门为我和我的浏览器(会话!)的对象,在会话对象中还有其他内容表明当前登录的用户是我。我挑战您考虑如何将用户凭据存储在会话之外,而不是将当前登录的用户存储在会话中。

要了解有关会话及其工作原理的更多信息,请点击此处:What are sessions? How do they work?。

【讨论】:

感谢您的回复!如果有多个用户在同一会话期间注册,此代码是否有效?我也收到此错误找不到符号符号:方法 addAttribute(String,String) 位置:HttpSession 类型的变量会话 是 session.setAttribute(),不是 addAttribute();

以上是关于使用 cookie/会话存储用户名、密码 - Java Servlets [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Cookie和Session

为用户名和密码启动会话

PHP系列(十三)PHP会话控制

会话技术cookie和session

Cookie处理

站点用户可以更改 cookie 或会话数据吗?