javaWeb之Cookie概述与应用

一、什么是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 />&nbsp;&nbsp;&nbsp;码:<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值