会话技术(session technology)
* context
代表整个web项目
* request&response
一次请求会话的有效范围
* session&cookie
用于多次的请求,两者一个存在于服务器,一个存在于客户端,前者的安全性更高
一、session(服务器端的会话技术)
1.session的原理:session是依赖于cookie的
1.1 当第一次请求服务器时,在服务器中获取session对象。获取一个新的session对象向对象中存储数据
1.2 当服务器作出响应时,会将刚才的session对象的id通过set-cookie头 发送到客户端
1.3 客户端浏览器接受到响应头,会将jsessionid=xxx存储到浏览器中
1.4 当客户端第二次请求服务器端时,会通过cookie请求头卸载带这个jsessionid=xxx
1.5 服务器获取到这个请求头(cookie),会根据id查找是否有这个对应的session对象。
* 有:第N次 N>1
* 没有:第一次来
2.代码
//获取session
HttpSession session = request.getSession();
//使用session
//1.存储数据
session.setAttribute();
//2.使用在数据
session.getAttribute();
3.session细节
- 当客户端关闭再打开时,两次打开的是不同的session
- 当服务器正常关闭再打开时,两次打开的是同一个session
- 对象的销毁,在xml中默认30min(可以改),用invalidate()方法可以自杀
- 如果客户端禁用了Cookie,要通过URL重写来解决问题;
二、Cookie(客户端会话技术)
1. 原理
- 客户端请求信息resquest
- 服务器给客户端response,通知客户端存储cookie
- 客户端存住cookie,下次访问时,把Cookie用请求头发给服务器>4. 服务器根据Cookie的信息发送相关的信息
2. 代码实现
- 创建Cookie
//创建对象
Cookie cookie = new Cookie("name","value");
//通知客户端存储对象
response.addCookie(cookie);
- 使用Cookie
//1.获取Cookie
ookie[] cs = request.getCookies();
//2.遍历
if(cs!=null){
for(Cookie c :cs){
//获取cookie的名称
String name= cookie.getName();
//根据名称的不同,时行不同的处理
if("zhangsan".equals(name)){
System.out.print(name+"..."+cookie.getValue();
}
}
}
3. 细节
Cookie的持久化
- setMaxAge()
- 正数,保存在硬盘中的时间
- 负数,保存在内存中
- 零 ,立刻删除该Cookie
- setMaxAge()
存储中文
- 发送时URL编
name = URLEncoder.encode(name, "utf-8");
- 获取后URL解码
value = URLDecoder.decode(value, "utf-8");
- 发送时URL编