使用 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章