目录
3.5 在登录页面(lg.jsp)添加检索Cookie是否存在
1. 问题
在用户登陆界面中,输入账号和密码,登陆成功时,进入欢迎页面。在登录时,如果勾选了两周内免登录,则在下次登录时,可以不用输入密码,直接跳转到成功页面,从而实现免登录功能。
2.解决思路
当用户登陆时勾选了免登录按钮,在cookie的处理逻辑中就会将从登录页面中获取到的用户信息存储在cookie中,同时可以设置cookie的有效时间等。当用户在cookie有效时间内再次登录,在登陆页面就会获取cookie,查看其中是否有之前储存的数据,如果有就会直接跳转到成功页面。
3. 解决步骤
3.1 编写登录页面(lg.jsp)
这里的两个文本框中的<%=username%>和<%=password%>后面会提到,是在再次登录时,从cookie中获取信息自动填充的。
<%@ page import="java.io.PrintWriter" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %><%--
Created by IntelliJ IDEA.
User: dell
Date: 2021/11/4
Time: 21:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>登陆页面</title>
<style>
.lg {
margin-top: 100px;
}
body {
background: aliceblue;
}
</style>
</head>
<body>
<div class="lg">
<form action="lg" method="post">
<table border="1" width="30%" align="center">
<caption>用户登录</caption>
<tr>
<td><label for="username">用户名:</label></td>
<td><input type="text" name="username" placeholder="请输入用户名" id="username" value="<%=username%>"></td>
</tr>
<tr>
<td><label for="password">密码:</label></td>
<td><input type="password" name="password" placeholder="请输入密码" id="password" value="<%=password%>"></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="twoDays" type="checkbox" value="ok">两天内免登陆</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登陆"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
3.2 编写一个登录成功页面(success.jsp)
<%@ page import="java.io.PrintWriter" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %><%--
Created by IntelliJ IDEA.
User: dell
Date: 2021/11/4
Time: 21:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta charset="UTF-8">
<title>登陆页面</title>
<style>
body {
background: aliceblue;
}
</style>
</head>
<body>
登陆成功!!
</body>
</html>
3.3 编写登录失败页面(fail.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>fail</title>
</head>
<body>
用户名或密码错误,请
<a href="lg.jsp">重新登陆</a>
</body>
</html>
3.4 写一个cookie的类用来存储从页面获取的用户信息(Login.java)
当我们选择“免登录”在按下登录按钮后,在cookie处理这块就会判断从登录页面获取的twodays的参数值是不是"ok",如若是,被获取的用户信息表单就利用cookie将保存起来了。
这里可以设置cookie的有效时间,便于检查这里设置的是10秒。
@WebServlet("/lg")
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String twoDays = request.getParameter("twoDays");
PrintWriter out = response.getWriter();
//查看用户名和密码是否正确,我这里对用户名和密码没有强用要求,只要输入了就行,可以自己改
if (username != null && password != null) {
if ("ok".equals(twoDays)) {
//将用户信息存储到cookie中,并且关联路径和设置有效时间
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("password", password);
cookie1.setPath("/");
cookie2.setPath("/");
cookie1.setMaxAge(10);//10秒
cookie2.setMaxAge(10);
//服务器发送cookie给客户端浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
//跳转到主页
response.sendRedirect("success.jsp");
} else {
//跳转到登陆失败页面
response.sendRedirect("fail.html");
}
}
}
3.5 在登录页面(lg.jsp)添加检索Cookie是否存在
如果cookie已经保存过了,那么当用户在cookie的有限时间内在登陆时,应该自动填充账号密码,并且跳转到成功页面。
上面提到的<%=username%>和<%=password%>是在这里得到的,获取一个Cookie数组,检索一下当前账号是否已经有保存了,如果有的话,那if(cookies!=null&&cookies.length>0)就会成立,在数组中找到我们需要的账号和密码,自动填充到两个文本框中,接下来就会利用request.getRequestDispatcher("success.jsp").forward(request, response)跳转到成功页面。
<%
//获取cookie
Cookie[] cookies = request.getCookies();
//取出cookie中的值
String username = "";
String password = "";
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
if ("username".equalsIgnoreCase(cookieName)) {
username = cookie.getValue();
}
if ("password".equalsIgnoreCase(cookieName)) {
password = cookie.getValue();
}
if ("username".equalsIgnoreCase(cookieName)){
request.getRequestDispatcher("success.jsp").forward(request, response);
}
}
}
%>
4. 运行结果
跳转到成功页面
再次访问登陆界面时,就会跳转到成功页面。
如果有错误或者有疑问,欢迎一起交流~~