使用Cookie实现“记住我”的功能
账号是"hello",密码是"world"。
主页面index.jsp的代码如下:
<%@ page import="java.net.URLDecoder" %>
<%--加载静态JSP页面需设置该页的编码格式为UTF-8--%>
<%@ page pageEncoding="utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
<link rel="stylesheet" href="css/basic.css">
</head>
<body>
<div>
<%
// 用户名
String user = "";
// 登录密码
String pass = "";
// 复选框是否选中
String checked = "";
// 获取的是请求里的所有cookie组成的数组
Cookie[] cookies = request.getCookies();
// 如果cookies数组不为空对其进行遍历
if (cookies != null && cookies.length > 0) {
// 循环遍历Cookie
for (int i = 0; i < cookies.length; i++) {
// 获取Cookie对象
Cookie cookie = cookies[i];
// 将创建的cookie名与获取的cookie数组中已经存在的cookie名进行比较
if ("name".equals(cookie.getName())) {
// "name"是在另一个jsp文件中创建的cookie名
// 获取名字叫做"name"的cookie的值
user = URLDecoder.decode(cookie.getValue(), "utf-8");
// 将“记住我”设置为勾选
checked = "checked";
}
// 将创建的cookie名与获取的cookie数组中已经存在的cookie名进行比较
if ("password".equals(cookie.getName())) {
// "password"是在另一个jsp文件中创建的cookie名
// 获取名字叫做"password"的cookie的值
pass = cookie.getValue();
}
}
}
%>
<h1>用户登录</h1>
<form action="login.jsp" method="POST">
<%--<%=user%>指的是将获取的cookie值放进输入框内--%>
<img src="img/login.png"><input type="text" name="username" value="<%=user%>"/><br/><br/>
<img src="img/password.png"><input type="password" name="password" value="<%=pass%>"/><br/><br/>
<input type="checkbox" name="rememberme" checked="<%=checked%>"/>记住我
<input type="submit" name="login" value="登录"/>
</form>
</div>
</body>
</html>
对登录进行验证的login.jsp内容如下:
<%@ page import="java.net.URLEncoder" %>
<%@ page pageEncoding="utf-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<%
// 获取输入用户名文本框的值
String username = request.getParameter("username");
// 获取输入密码的密码框的值
String password = request.getParameter("password");
%>
<%
// 在这里进行用户名和密码匹配,在这里是将用户名和密码规定死了的。
// 即用户名必须是"hello",密码必须是"world"才能登录成功
if (username.equals("hello") && password.equals("world")) {// 如果用户名和密码都正确
// 新建名为name的Cookie
Cookie nameCookie = new Cookie("name", URLEncoder.encode(username, "utf-8"));
// 新建名为password的Cookie
Cookie passwordCookie = new Cookie("password", password);
// 设置Cookie的使用路径
nameCookie.setPath(request.getContextPath() + "/");
passwordCookie.setPath(request.getContextPath() + "/");
// 获取是否保存Cookie
String rememberme = request.getParameter("rememberme");
// 判断复选框是否被选中,如果选中则返回on
if (rememberme.equals("on")) {
// 设置保存Cookie的时间长度,单位为秒
nameCookie.setMaxAge(7 * 24 * 60 * 60);
passwordCookie.setMaxAge(7 * 24 * 60 * 60);
} else {
// 设置将不保存Cookie
nameCookie.setMaxAge(0);
passwordCookie.setMaxAge(0);
}
// 输出到客户端
response.addCookie(nameCookie);
response.addCookie(passwordCookie);
// 登录成功后跳转到success.jsp
request.getRequestDispatcher("success.jsp").forward(request, response);
} else if (!username.equals("hello") && password.equals("world")) {// 如果用户名不正确,密码正确
// 保存错误提示数据
session.setAttribute("error", "用户名不正确");
// 登录失败后将跳转到error.jsp
request.getRequestDispatcher("error.jsp").forward(request, response);
} else if (username.equals("hello") && !password.equals("world")) {// 如果用户名正确,密码不正确
// 保存错误提示数据
session.setAttribute("error", "密码不正确");
// 登录失败后将跳转到error.jsp
request.getRequestDispatcher("error.jsp").forward(request, response);
} else {// 如果用户名和密码都不正确
// 保存错误提示数据
session.setAttribute("error", "用户名和密码都不正确");
// 登录失败后将跳转到error.jsp
request.getRequestDispatcher("error.jsp").forward(request, response);
}
%>
</body>
</html>
而登录成功后跳转的success.jsp页面内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
<h1>恭喜你,登录成功!</h1>
</body>
</html>
登录失败后跳转的error.jsp页面内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Error</title>
</head>
<body>
<h1 >Error:<%=session.getAttribute("error")%></h1>
</body>
</html>
最后成功