概述
会话技术
:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话。会话技术产生是由于Http请求是一个无状态的
协议,它不会记录上次访问的内容,用户在访过程中难免产生一些数据,通过会话技术可以将其保存起来。常见的会话技术cookie、Session。
Cookie
Cookie称之为浏览器端的会话技术
。
Cookie是由服务端生成,通过response将cookie写会浏览区(set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的Cookie(通过request请求头),我们服务就可以接受Cookie。
Cookie基本使用
// 创建Cookie
Cookie cookie = new Cookie("key", "value");
// 将cookie协会浏览器
response.addCookie(cookie);
// 获取浏览器携带的Cookie 返回的是Cookie数组
Cookie[] cookies2 = request.getCookies();
for (Cookie cookie2 : cookies2) {
// 获取某个cookie的key
String key = cookie2.getName();
String value = cookie2.getValue();
}
由于服务端可以向客户端通过response写入多个cookie,因此通过request获取cookie返回的是Cookie数组,如果之前未向浏览器写入过cookie,获取的cookie数组返回时null值不要直接就遍历,否则造成空指针异常。
Cookie其它API
// 设置Cookie有效域名
void setDomain(String str);
// 设置Cookie的有效时长
void setMaxAge(int maxAge); setMaxAge(0); --- 删除持久的Cookie
Cookie注意事项
Cookie保存的时候一个浏览器上对Cookie的个数和大小都是由限制的.
Cookie默认不能保存中文.
- URLEncoder.encode();
- URLDecoder.decode();
Session
Session称之为服务端的会话技术
。
当我们第一次访问服务器的时候,服务器会获取SessionId,如果不能获取id,则创建一个session,将您的数据保存到session中,将当前的sessionId返回给浏览器。如果能获取到id,就根据此sessionId去获取Session,如果根据id获取不到session就创建一个session,将数据保存,返回id给客户端。返回id给客户端还是基于Cookie会话技术。
Session基本使用
// 根据request获取session
HttpSession session = request.getSession();
// 往session中写入数据 key value形式
session.setAttribute("name", "jake");
// 根据key从session获取value
session.getAttribute("name");
Session的声明周期
Session是一个域对象,保存在服务端,第一次调用request.getSession()创建。销毁三种情况
- session过期:默认过期时间30分钟 web.xml默认配置
- 非正常关闭服务器:(正常关闭服务器 序列化到硬盘)
- 调用session.invalidate()