会话技术是什么
会话:一次会话(浏览器一次给服务器发送多次请求,会话建立,直到有一方断开连接)中包含多次请求和响应
功能:在一次会话*享多次请求间的数据
分类:
1.客户端会话技术:Cookie
2.服务器端会话技术:Session
客户端会话技术
1.基本使用
创建Cookie对象,绑定数据,是一个键值对的形式,值得注意的是Cookie的构造方法传入的两个参数都是字符串,Cookie并不允许存储除字符串以外的数据。
new Cookie(String name, String value);
// 设置头
setName(String name);
// 设置值
setValue(String value);
2.发送Cookie对象给客户端保存
response.addCookie(Cookie cookie);
3.获取客户端存储的Cookie对象,返回一个数组
Cookie[] request.getCookies();
Cookie的细节
1、一次可以发送多个cookie,只需要都给它使用addCookie方法就行
2、 cookie在浏览器中可以保存多久的是时间?
在默认情况下,当关闭浏览器后,Cookie将被销毁
3、持久化存储
 调用方法Cookie对象的方法setMaxAge(int seconds),单位时秒,有三种结果
- 正数:表示将Cookie数据写入硬盘文件文件中,持久化存储,当到达指定的时间后cookie文件自动销毁
- 负数:默认值,当浏览器被关闭时自动销毁
- 0:删除cookie信息
4、Cookie能不能存储中文?
 在tomcat8.0之前,cookie是不能存储中文的,8.0以后的版本是支持中文的
5、cookie共享问题
- 假设在一个tomcat服务器中,部署了多个项目,那么在这些项目中cookie是否能被共享?
在默认情况下是不能被共享的,共享需要设置cookie的获取范围,语法:setPath(String path),默认情况下它的是是当期目录,将它的值设置为"/",表示根目录- 不同tomcat服务器间cookie共享问题
 语法:setDomain(String path),如果设置一级域名相同,那么多个服务器之间就可以共享,如:setDomain(".baidu.com") 就是一级域名
注:cookie存储数据在客户端的浏览器上;浏览器对单个cookie大小有一定的限制(约4kb左右),同一域名下的总cookie数量也有一定的限制(20个);最后cookie一般存储小量不太敏感的数据,可以用于在不登录的情况下服务器对客户端身份的识别
服务器会话技术
- 基本语法
// 通过request获取Session
Session session = request.getSession();
// 获取指定键的值,
Object session.getAttribute(String name);
// 存储一组数据,Session对存储的值没有类型的限制,大小同样没有,但不建议存储大型数据
setAttribute(Sring name, Object value);
// 通过键删除指定的键值对
removeAttribute(String name)
注:是根据当期浏览器存储,不会出现多个浏览器共享的情况
Session的细节处理
1、在客户端关闭后,服务器不关闭,两次获取的Session为同一个?
在默认情况下不是。如果需要相同则需要先创建一个Cookie对象,将其的键设置为“JSESSIONID”,设置一下cookie的存活时间 (因为这样会关闭浏览器,在默认情况下当浏览器被关闭时cookie对象就会被销毁) ,语法为:
Cookie cookie = new Cookie("JSESSIONID", session.getID); // 设置存活时间为1小时 cookie.setMaxAge(60 * 60); // 将创建的Cookie对象发送给浏览器 response.addCookie(sookie);
实现原理:在获取Session对象时如果响应头中没有指定“JSESSIONID”,那么就会创建一个新的Session对象,如果使用Cookie将原本的“JSESSIONID“存储起来,那么在获取时响应头发现了存储在里面的Session对象的id,那么它就会去找到指定的那个Session对象将其返回
2、客户端不关闭,服务器关闭,两次获取的session对象还是一个吗?
不是,但会确保数据不丢失。tomcat会自动完成对应的工作:1.session钝化,在服务器正常关闭前,会将session对象序列化到硬盘上;2.session活化,在服务器启动后,会将钝化好的session文件转换后加载到内存中
注:idea并不能完成活化的过程,钝化是可以的。原因:在运行过程中产生的临时文件会放在work目录下,而idea会将上次的work文件先删除掉,再创建一个新的3、session在什么时候被销毁
1.服务器关闭
2.session调用invalidate();
3.session过失效时间(设置其失效时间方法setMaxInactiveInterval(int time)),默认时间时30分钟
Cookie与Session的区别
1.session存储数据在服务器端,cookie在客户端
2.session没有数据大小,Cookir有
3.session数据安全,Cookie相对