cookie
1,保存在浏览器客户端,减轻服务器负担
2,数据类型只能String型,而且有大小限制
3,数据存放相对不安全
session
1,保存在服务器端(服务器的内存中),占用服务器的资源
2,数据类型和数据大小没有限制
3,数据安全
Cookie的API
Cookie类:保存会话数据
1)创建Cookie对象,用于保存会话数据
new Cookie(java.lang.String name,java.lang.String value)
2)设置Cookie对象
void setPath(java.lang.String uri) 设置cookie有效路径
voidsetMaxAge(int expiry) 设置cookie的有效时长
voidsetValue(java.lang.String newValue) 设置cookie的值
3)发送Cookie数据到浏览器保存
response.addCookie(cookie);
4)接收浏览器发送的Cookie数据
Cookie[] request.getCookies()
Cookie的原理
1)服务器端创建Cookie数据,然后通过set-cookie的响应头把cookie数据发送给浏览器保存
响应头:例如: set-cookie: name=eric
2)浏览器得到服务器发送cookie数据,保存在浏览器目录中。
3)浏览器在下次访问服务器时,会带着cookie数据访问服务器。通过cookie的请求头把cookie数据发送给服务器端
请求头:例如: cookie: name=eric
4)服务器可以接受浏览器发送的cookie数据
request.getCookies();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1,创建cookie对象,保存会话数据
//如果要发送中文,必须先使用URLEncoder进行加密
String n = URLEncoder.encode("张三","utf-8");
Cookie c = new Cookie("name", "zdh");
Cookie c1 = new Cookie("email", "11mqzdh2013@163.com");
//设置有效路径,默认情况下,设置当前项目的根目录下
//c.setPath("/day11");
/*设置cookie的有效时长
* 正整数: 表示超过了正整数的数值的时间,cookie就会丢失!!(cookie保存浏览器的缓存 目录)单位:秒
负整数: 表示如果浏览器关闭了,cookie就会丢失!(cookie保存浏览器内存) (默认情况)
0 : 表示删除同名的cookie
*/
//c.setMaxAge(10);//10秒后cookie消失
c.setMaxAge(-1); //关闭浏览器cookie消失。也是默认情况
c1.setMaxAge(50);
//2,把cookie数据发送给浏览器,通过响应头携带cookie数据给浏览器(set-cookie)
//response.setHeader("set-cookie", "name=zzz");
//简化版本
response.addCookie(c);
response.addCookie(c1);
//3,浏览器在下次访问的时候携带了cookie数据,通过请求头发送给服务器(cookie)
//4,浏览器获取浏览器发送的cookie数据,
// String name = request.getHeader("cookie");
// System.out.println(name);
Cookie[] cookie = request.getCookies();
if(cookie!=null){
for(Cookie ck:cookie){
String name = ck.getName();
String value = ck.getValue();
System.out.println(name+"="+value);
}
}else{
System.out.println("没有cookie 信息!!");
}
}
需要注意:
1)设置cookie有效路径: setPath(uri) 。如果cookie在有效路径下,那么浏览器在下次访问该有效路径时就会带着cookie数据到服务器。
2)设置cookie的有效时长: setMaxAge(整数)
正整数:cookie数据保存在浏览器的缓存目录中(硬盘中)。例如10。10秒之后就cookie 就会丢失。(从最后一次访问cookie开始计算)
负整数: cookie数据保存在浏览器的内存中,浏览器关闭cookie数据就会丢失。
零: 删除同名的cookie
3)可以同时往浏览器发送多个cookie数据,必须是字符串类型的。浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。