java - 使用 cookies/session 存储用户名和密码 - Java Servlets

标签 java forms session servlets cookies

<分区>

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

因此,如果我使用用户名: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 服务程序

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 );

最佳答案

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

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

在这里使用您的代码是创建 session 的方法。

// 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 个人使用同一台计算机则不行,上面的代码将无法正常工作。这是因为用户凭据仅存储在 session 中,在 session 被销毁或 session 中的数据被覆盖后,没有任何内容会持续存在。假设 session 是一个直接绑定(bind)到每个用户的对象。所以现在我在 StackOverflow 上,在他们的代码中的某个地方有一个专门为我和我的浏览器( session !)的特殊对象,在 session 对象中还有其他东西说当前登录的用户是我。我要求您考虑如何将用户凭据存储在 session 外部,而不是将当前登录的用户存储在 session 内部。

要了解有关 session 及其工作方式的更多信息,这里有一个很好的答案:What are sessions? How do they work? .

关于java - 使用 cookies/session 存储用户名和密码 - Java Servlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206953/

相关文章:

python - Django 1.9 form.is_valid 在 ModelForm 上失败

node.js - 第一页加载时有多个快速 session 实例

java - Java 内存模型中的 happens-before 规则

java - 如何使用 Jersey 在应用程序之外扫描资源的类路径?

java - Selenium 查找多种可能类型的元素

java - 如何更改Spring Security中SAML请求的签名算法

forms - Drupal 表单 :want to show previous form value as default_value on page

.net - 是否有与 Perl 的 LWP/WWW::Mechanize 等效的 .NET?

php - 使用 session PHP 将登录详细信息传递到另一个页面

PHP json_encode 仅返回单行