状态管理与cookie
http协议是无状态的,不能保存每次提交的信息
如果用户发来一个请求,服务器无法知道它和上一次请求是否有联系
将浏览器与服务器的多次交互当作一个整体来处理,将数据保存下来
客户端状态管理(将状态保存在客户端):cookie技术
服务器端状态管理(将状态保存在服务器端):session技术
cookie:服务器响应给浏览器的一个数据
一个cookie由name 和value组成
cookie的使用
1.创建cookie
可以发送多个cookie给客户端对象
//1.服务端创建cookie对象
Cookie cookie=new Cookie("username", "zhangsan");
cookie.setPath("");//设置路径
cookie.setMaxAge(-1);// 设置有效时间 >0,单位秒 =0浏览器关闭 <0 内存存储 默认-1
//2.将cookie响应给客户端
resp.addCookie(cookie);
查看cookie:
1.检查->选中NetWork->Headers
如下图所示:
2.在浏览器设置中查看localhost下的cookie
2.获取cookie
//通过request对象获取所有cookie
Cookie[] cookies=req.getCookies();
//2.通过循环遍历cookie
if(cookies !=null){
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+":"+cookie.getValue());
}
}
控制台中可打印出如下cookie信息:
3.修改cookie
cookie的名称和路径一致即可修改
只有name和path均一致时才会覆盖,达到修改的效果
4.cookie编码与解码
cookie默认不支持中文,需要编码才能防止中文乱码问题
当cookie保存的为中文时如下:
Cookie cookie=new Cookie("姓名", "宋先慧");
resp.addCookie(cookie);
将会发生500错误
创建带中文的cookie:
Cookie cookie=new Cookie(URLEncoder.encode("姓名","utf-8"),URLEncoder.encode("宋先慧","utf-8"));
resp.addCookie(cookie);
解码带中文的cookie:
System.out.println(URLDecoder.decode(cookie.getName(), "UTF-8")+":"+URLDecoder.decode(cookie.getValue(), "UTF-8"));
cookie大小受限制
cookie易被篡改,存在安全隐患