会话:管理游览器客户端 和服务器端之间的会话过程中产生的数据
软件的会话:打开游览器 --》 访问网站 --》关闭游览器
域对象:实现资源之间的数据共享
contest 是所有用户共有的资源,会覆盖数据
request 则必须用转发形式跳页面
解决方法:
session 域对象来保存数据!
会话技术:
Cookie 技术: 会话数据保存在游览器客户端
Session 技术: 会话数据保存在服务器端
Cookie:
特点:数据保存在游览器客户端
核心:Cookie类:用于存储会话数据
构造:Cookie(name,value)
设置Cookie:
setPath(uri) 设置cookie 的有效访问路径
setMaxAge(1) 设置cookie的有效时间
setValue(newValue) 设置cookie的值
发送cookie到游览器端保存:
response.addCookie(Cookie cookie)
服务器接收cookie:
request.getCookies()
使用:
1、创建对象
Cookie cookie = newCookie("email","eric@qq.com"):
2、把cookie数据发送到游览器(通过响应头:set-cookie)
response.setHeader("set-cookie",cookie.getName()+"="+cookie.getValue()+",email=erice@qq.com");
//推荐使用这种方式,避免手动发送cookie信息
response.addCookie(cookie);
3、游览器接受发送的Cookie信息
request.getHeader("cookie");
Cookie[] cookies = request.getCookies();
原理:
1)服务器创建cookie对象,把会话数据保存在cookie对象中。
2)服务器发送cookie信息到游览器
3)游览器的到服务器发送的Cookie,保存到游览器
4) 游览器在下次访问服务器时,会带着cookie信息
Cookie的细节:
1、voidsetPath(uri) 设置cookie的有效访问路径。有效路径是指cookie的有效路径保存在哪里,则哪里就会带着cookie
2、voidsetMaxAge(int expiry) 设置cookie 的有效时间
正整数,表示cookie数据保存游览器的缓存目录在硬盘中,数字表示保存的时间
负整数,表示cookie数据保存在游览器的内存中,游览器关闭cookie就丢失了
零,表示删除同名的cookie数据
3、Cookie的数据类型只能保存字符串类型的,可以保存多个cookie,但游览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个Cookie的大小限制为4KB
案例:
用户上次访问:
第一次访问:
1、获取当前时间,显示到游览器中
2、创建Cookie对象,时间作为cookie 的值,名为:lastTime
3、把cookie发送到游览器
第N次访问:
1、获取cookie的数据,取出lastTime的cookie
2、得到cookie的值(上次访问的时间)
3、显示到游览器中
4、更新名为lastTime的Cookie,值设置为当前时间
5、把更新后的Cookie发送给游览器保存
Session:
特点:
保存数据到服务器中(内存中),从哪个对象保存数据,就必须从哪个域对象中取出
代码解读
1、创建session对象 ,给session对象分配一个唯一的Id,叫JSessionId,
HttpSession session = request.getSession();
2、把JsessionId作为Cookie的值发送给游览器
3、第二次访问的时候,游览器会带着JSESSIONID的cookie访问服务器,
4、服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应的编号sessionID
5、如果找到对应标号的sessio对象,直接返回该对象
6、如果找不到对应的session对象,创建新的session对象,继续走1的流程
结论:通过JSESSIONID的cookie值在服务器中搜索是否有该对象
核心Api
getId(); 获取session编号
getSession()/getSession(true);