我正在尝试使用servlet创建注册页面。我创建了一个基本的HTML页面,其中包含一个输入用户名和密码的表单。现在我需要做的是使用cookie / sessions存储提交给表单的信息。然后,在登录页面上,用户必须能够使用之前提供的信息登录。 所以基本上我需要知道如何存储用户名和密码。
因此,如果我使用用户名注册:admin和密码123,然后注册用户名:user和密码:12345,我应该无法使用admin和12345或用户和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 );
答案 0 :(得分:5)
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");
当然,如果您在清除服务器缓存时以这种方式执行操作,则将删除用户名和密码。此外,服务器缓存中的非加密密码肯定存在安全问题。
修改强>
如果有两个人使用同一台计算机,那么上面的代码就不能正常工作。这是因为用户凭据仅存储在会话中,在会话被销毁或会话中的数据被覆盖后,没有任何内容会持续存在。想象一下,会话是一个直接绑定到每个用户的对象。所以现在我在StackOverflow上,在他们的代码中的某个地方有一个特殊的对象,仅供我和我的浏览器(会话!),在会话对象中还有一些东西说当前登录的用户是我。我要求您考虑如何在会话之外存储用户凭据,而不是将当前登录的用户存储在会话中。
要了解有关会话及其工作原理的更多信息,请在此处提供一个很好的答案:What are sessions? How do they work?。