一、什么是Cookie
Cookie技术是一种在客户端保持会话跟踪的解决方案。二、Cookie对象的创建
Cookie可以通过javax.servlet.http.Cookie类的构造方法来创建。
Cookie cookie = new Cookie("username","哼哼的博客");
- 第一个参数用于指定Cookie的属性名。
- 第二个参数用于指定属性值。
创建完成的COokie对象,可以使用HttpServletResponse对象的addCookie()方法,通过增加响应头将其响应给客户端浏览器。
response.addCookie(cookie);
参数是一个Cookie对象。存储在客户端的Cookie,通过HttpServletRequest对象的getCookie()方法来获取,该方法返回一个Cookie数组。
Cookie [] cookies = request.getCookies();
if(Cookie c: cookies){
out.pritln("属性名"+c.getName());
out.pritln("属性值"+c.getValue());
}
Cookie 可以通过setMaxAge()方法设置其存活时间(以秒为单位),时间为整数表示存活秒数,时间为负数表示为临时Cookie,时间为0,表示通知浏览器删除相应的Cookie。
cookie.setMaxAge(7*24*60*60);//设置cookie的存活的时间是一周。单位是秒
代码演示利用Cookie实现永久登录。
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String username = "";
String password = "";
// 获取cookie
Cookie[] cookies = request.getCookies();
// 如果为空,则停留在该页面
if(cookies == null){
return ;
// 不为空则获取用户名和密码
}else{
for(int i = 0; i < cookies.length; i++){
if("username".equals(cookies[i].getName())){
username = cookies[i].getValue();
}
if("password".equals(cookies[i].getName())){
password = cookies[i].getValue();
}
}
// 验证用户名和密码
if("admin".equals(username) && "123".equals(password)){
session.setAttribute("username", username);
session.setAttribute("password", password);
response.sendRedirect("welcome.jsp");
}
}
%>
<form action="test" method="post">
用户名:<input type="text" name="username" /><br />
密 码:<input type="password" name="password" /><br />
<input type="radio" name="validTime" value="week" />一周
<input type="radio" name="validTime" value="month" />一月
<input type="radio" name="validTime" value="default" checked="checked" />默认<br />
<input type="submit" value="登陆" />
</form>
</body>
</html>
CookieServlet.java
@WebServlet("/test")
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
// 获取有效时长
String validTime = req.getParameter("validTime");
// 验证成功跳转welcome.jsp,否则跳转login.jsp
if ("admin".equals(username) && "123".equals(password)) {
Cookie userCookie = new Cookie("username", username);
Cookie pwdCookie = new Cookie("password", password);
if ("week".equals(validTime)) {
userCookie.setMaxAge(7 * 24 * 60 * 60);
pwdCookie.setMaxAge(7 * 24 * 60 * 60);
}
if ("month".equals(validTime)) {
userCookie.setMaxAge(30 * 24 * 60 * 60);
pwdCookie.setMaxAge(30 * 24 * 60 * 60);
}
HttpSession session = req.getSession();
session.setAttribute("username", username);
session.setAttribute("password", password);
resp.addCookie(userCookie);
resp.addCookie(pwdCookie);
resp.sendRedirect("welcome.jsp");
} else {
resp.sendRedirect("login.jsp");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎回来${username}
</body>
</html>