Cookie的详解及示例

给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie可以被用户禁止
Cookie会将状态保存在浏览器端,不安全。对于敏感数据需要加密后再使用Cookie来保存
Cookie只能保存少量的数据,大约4kb左右
Cookie的个数是有限制的
Cookie只能保存字符串,且不能放中文字符串

不同的浏览器有不同的查看方式;以Chrome浏览器为例,点击URL前的 图标即可查看Cookie信息,例如:
在这里插入图片描述
或者右键检查元素
在这里插入图片描述
示例:
需求:
1)运行TestCookieServlet,保存username和pwd信息到Cookie并返回到客户端.
2)再运行GetCookieServlet,获取Cookie并进行显示

TestCookieServlet:

// 创建cookie对象
Cookie username=new Cookie("username","Alice");
Cookie pwd=new Cookie("pwd","abc123");
// 将Cookie保存到响应中
response.addCookie(username);
response.addCookie(pwd);

在浏览器中访问TestCookieServlet,http://localhost:8080/chapter04/TestCookieServlet;
可以查看到locahost保存了两个Cookie信息到客户端:
在这里插入图片描述
GetCookieServlet:

// 获取当前请求中的所有Cookie对象
Cookie[] cookies=request.getCookies();
// 输出所有Cookie的名字和值
if(cookies==null){
    
    
out.println("没有Cookie。");
return;
}
for(Cookie c:cookies){
    
    
out.println(c.getName()+"="+c.getValue());
}

4.设置cookie生存时间

修改TestCookieServlet

// 创建cookie对象
Cookie username=new Cookie("username","Alice");
Cookie pwd=new Cookie("pwd","abc123");
// 设置cookie的生命时间,24小时内有效
username.setMaxAge(24*3600);
pwd.setMaxAge(24*3600);
// 将Cookie保存到响应中
response.addCookie(username);
response.addCookie(pwd);

先运行TestCookieServlet,保证Cookie信息保存到客户端;
再运行GetCookieServlet,获取Cookie并进行显示;
在这里插入图片描述
将时间调到24小时后,再次访问GetCookieServlet,发现Cookie已经不存在
在这里插入图片描述
如果没有使用setMaxAge方法设置最大生命时间的Cookie,则浏览器关闭就失效;
5.解决cookie中文编码
cookie的值只能是ASCII字符;中文需要转换成ASCII码形式;使用
URLEncoder.encode()方法和URLDecoder.decode()方法实现。
EncodeServlet:

response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//编码
String username = URLEncoder.encode("李想", "utf-8");
String country = URLEncoder.encode("中国", "utf-8");
//创建cookie
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("country", country);
//添加响应的cookie
response.addCookie(cookie1);
response.addCookie(cookie2);
}

DecodeServlet

	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	Cookie[] cookies = request.getCookies();
    if(cookies!=null){
    
    
		for(Cookie cookie:cookies){
    
    
			String name = URLDecoder.decode(cookie.getName(), "utf-8");
			String value = URLDecoder.decode(cookie.getValue(), "utf-8");
			out.println(name+":");
			out.println(value+"<br/>");
		}
	}
	else{
    
    
		out.println("<h4>没有 cookies</h4>");
	}
	out.close();
}

访问encodeCookie,查看响应数据包
在这里插入图片描述
访问decodeCookie,查看页面输出
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41936224/article/details/108973158