状态管理:http无状态连接 cookie、session
cookie:存客户端,4kb、20个
session:存服务器,大小多少不受限制
1、cookie创建对象:new Cookie(key,value);
2、存放中文,需要对中文进行编码和解码操作,对他的重新编码使用的是URLDecoder decode(value,“UTF-8”);
在get的时候进行解码:
URLEncoder encode(value,“UTF-8”);
3、response.addCookie(cookie);
4、获取cookie
resquest.getCookies();、getName()、getValue()
得到所有的cookie 得到name 根据name获取得到内容
5、cookie的失效:
暂时性:缓存中,浏览器的关闭即结束
永久性:setMaxAge()单位为秒,过了设置的失效时间就结束了
setMaxAge(0),表示当前的cookie对象失效
response.setContentType("text/html;charset=UTF-8");
//Cookie存储的数据只能是字符串
Cookie cookie = new Cookie("name","admin");
Cookie cookie2 = new Cookie("pw","123456");
cookie2.setMaxAge(1800);//单位是秒,存在的时间是1800秒,之后就会消失
//添加cookie到客户端
response.addCookie(cookie);
response.addCookie(cookie2);
response.getWriter().append("设置Cookie");//打开这个set才能让get方法获取到里面的值,且有一定的时限
session:
1、request.getSession(boolean)
getSession(),getSession(false);不创建对象,如果之前存在对象,返回session
getSession(true);没有对象就创建对象,有对象则返回
getSession等同于getSession(true)
HttpSession session =request.getSession();
session.setMaxInactiveInterval(1800);
System.out.println(session.isNew());
System.out.println(session.getId());//sessionid,返回用于判断客户端不同对象的
System.out.println(session.getMaxInactiveInterval());//
System.out.println(session.getLastAccessedTime());
System.out.println(new Date(session.getLastAccessedTime()));
/*false
A32DD459132580DEE2AFC2C04D5E8087
1800
1598595719113
Fri Aug 28 14:21:59 CST 2020*/
response.getWriter().append("session:"+session.isNew());
2、set/get/remove/Attribute()
3、常用方法:isNew()、getId();
4、失效时间
默认:分钟
30
setMaxInactiveInterval();秒
request.getSession().invalidate();//session失效
session工作原理:
第一次创建session对象,会产生id值,以cookie对象的方式响应到客户端:
new Cookie(“JSESSIONID”,session.getId()),默认放到了浏览器的缓存中,以响应头(request header)的方式存储,再通过浏览器发送请求,request header 发送给服务器,同id获取session对象,有的话返回,没有的话进行创建