第三十二章:Cookie技术

版权声明:作者:java_wxid https://blog.csdn.net/java_wxid/article/details/84024548

作者:java_wxid
Cookie技术
a)什么是Cookie?
1.Cookie翻译过来是饼干的意思。
2.Cookie是由服务器通知客户端,并由客户端保存键值对的一种技术。
它的构造器是:public Cookie(String name, String value) {}
3.只要客户端有Cookie,每次请求都会发送给服务器。
4.每个Cookie不能超过4kb的大小
b)如何创建Cookie
1、创建一个Cookie对象
2、调用response.addCookie( cookie );
在这里插入图片描述

protected void createCookie(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {		
//		1、创建一个Cookie对象
		Cookie cookie = new Cookie("key1", "value1");
		Cookie cookie2 = new Cookie("key2", "value2");
//		2、调用response.addCookie( cookie );
		response.addCookie(cookie);
		response.addCookie(cookie2);		
		response.getWriter().write("创建了Cookie");
}

c)服务器如何获取Cookie
只需要调用reqeust.getCookies():Cookie[]
图解如何获取Cookie。
在这里插入图片描述

protected void getCookie(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 获取客户端发送过来的全部的Cookie对象
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length > 0) {
			for (Cookie cookie : cookies) {
				response.getWriter().write("收到客户端的Cookie:" + cookie.getName() + "====" + cookie.getValue() + "<br/>");
			}
		}
	}

工具类

public class CookieUtils {
	public static Cookie findCookie(String name,Cookie[] cookies) {
		if (name==null || cookies == null || cookies.length == 0) {
			return null;
		}
		for (Cookie cookie : cookies) {
			if (name.equals(cookie.getName())) {
				return cookie;
			}
		}
		return null;
	}	
}

d)Cookie值的修改

第一套方案是:
1、你要new一个同名的Cookie对象。
2、在构造器中传入你要修改的新值。
3、调用response.addCookie()

//		1、你要new一个同名的Cookie对象。
//		2、在构造器中传入你要修改的新值。
		Cookie cookie = new Cookie("key2", "newValue2");
//		3、调用response.addCookie()
		response.addCookie(cookie);

第二套方案是:
1、你需要先查找到你要修改的Cookie对象
2、然后调用setValue方法设置新的值
3、最后调用response.addCookie();

//		1、你需要先查找到你要修改的Cookie对象
		Cookie cookie = CookieUtils.findCookie("key1", request.getCookies());
		if (cookie != null) {
	//		2、然后调用setValue方法设置新的值
			cookie.setValue("newValue1");
	//		3、最后调用response.addCookie();
			response.addCookie(cookie);
		}

在谷歌浏览器中如何查看Cookie信息
在这里插入图片描述
在火狐 浏览器中如何查看 Cookie信息
在这里插入图片描述
e)Cookie生命控制
setMaxAge() 决定Cookie存活多久。
正数 在指定的秒数后过期。
零 表示马上删除Cookie
负数 表示浏览器关闭的时候,就删除Cookie(默认的情况)

protected void deleteNow(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Cookie cookie = CookieUtils.findCookie("key2", request.getCookies());
		if (cookie != null) {
			cookie.setMaxAge(0);// 立即删除Cookie
			response.addCookie(cookie);
		}
		response.getWriter().write("key2这个Cookie没了");
	}
	
	protected void life3600(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Cookie cookie = new Cookie("key2", "value3600");
		cookie.setMaxAge(60*60);//表示这个Cookie一个小时后被删除
		response.addCookie(cookie);
		response.getWriter().write("创建一个一小时后才会被删除的Cookie");
	}
	
	protected void defaultLife(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 创建出来的Cookie,maxAge默认值是-1,表示浏览器一关,Cookie就没了。
		Cookie cookie = new Cookie("key1", "value1");
		response.addCookie(cookie);
		response.getWriter().write("默认创建出来的Cookie,浏览器一关就没了");
	}

f)Cookie有效路径Path的设置
Cookie中有一个path属性,它可以有效的过滤哪些Cookie可以不用傻傻地发送给服务器。

当一个Cookie的path值为 /day14 表示请求地址是:http://ip:port/day14/* 那么Cookie就会发送给服务器

CookieA 的path=/day14
CookieB的path=/day14/abc

那么现在请求地址为:http://ip:port/day14/c.html
CookieA会发送给服务器

如果请求的地址为:http://ip:port/day14/abc/c.html
CookieA会发送给服务器
CookieB会发送给服务器

protected void pathTest(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	Cookie cookie = new Cookie("key3", "pathtest");
	cookie.setPath(request.getContextPath() + "/abc"); // 得到 /day14/abc
	response.addCookie(cookie);
	response.getWriter().write("我创建了一个有path的Cookie");
}

g)Cookie练习—免输入登录用户名
在这里插入图片描述
表单:

<body>
	<form action="userServlet">
		<input type="hidden" name="action" value="login"/>
		用户名:<input type="text" name="username" value="${ cookie.username.value }"/><br/>
		密码:<input type="password" name="password" /><br/>
		<input type="submit" />
	</form>
</body>

服务器Sevlet代码:

protected void login(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	
	if ("wzg168".equals(username) && "123456".equals(password)) {
		// 登录成功
		Cookie cookie = new Cookie("username", username);
		cookie.setMaxAge(60*60*24*7);// 用户名保留 一个星期
		response.addCookie(cookie);
		System.out.println("下次再来,我记住你啦");
	} else {
		// 登录失败
		System.out.println("登录失败!");
	}
}

猜你喜欢

转载自blog.csdn.net/java_wxid/article/details/84024548