1.session简介
1.Session技术是将数据存储在服务器端的技术
2.会为每个客户端都创建一块内存空间存储客户的数据
3.客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间
4.Session需要借助于Cookie存储客户的唯一性标识SESSIONID
2.Session如何办到在一个servlet当中存数据,在别的servlet当中取出当初存储的数据
1.每一个用户访问服务器时,会给该用户分配他自己对应的存储空间
2.并且创建的存储空间有一个编号我们称为SessionID
3.第一次访问时, 会把对应的sessionID以Cookie的形式写给浏览器
4.下次再访问时, 会携带sessionID,找到当初创建的那个存储空间
5.在对应的存储空间当中取出数据
3.具体的结构流程如下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426112228353.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTElBTl9f,size_16,color_FFFFFF,t_70)
4.如何获取Session对象
1.获得专属于当前会话的Session对象
HttpSession session = request.getSession();
2.如果服务器端没有该会话的Session对象,会创建一个新的Session返回
如果已经有了属于该会话的Session直接将已有的Session返回
3.本质就是根据SESSIONID判断该客户端是否在服务器上已经存在session了
5.向session当中存取数据
Session对象也是一个域对象:
1.存数据:
session.setAttribute(String name,Object obj);
2.取数据
session.getAttribute(String name);
3.移除数据
session.removeAttribute(String name);
已经学习的其它两个域对象
servletContext域
request域
6.session的生命周期
创建: 第一次执行request.getSession()时创建
销毁:
1.服务器关闭时
2.session过期/失效(默认30分钟)是从最后一次操作结束时计时
3.手动销毁 session.invadate
4.浏览器关闭,session就销毁,这句话是不正确的,
作用范围:
默认在一次会话中,也就是说在,一次会话中任何资源公用一个session对象
7.JsessioID持久化
1.默认情况下,第一次获取session对象时, 会帮你创建一个session,可以获取该Session的ID,会自动的把id写到cookie当中
2.session ID存在的问题;
1.第一次访问sevlet1时存储一些数据,在第二个servlet当中直接取数据,可以直接取到
2.当把浏览器关掉的时候:
直接到第二个servlet当中取数据,发现取不到数据了。
原因:因为访问的时候要求带着jsessionID.由于默认情况下,存储cookie是会话级别的,关闭浏览器,就没有了。所以再次打开浏览器。访问资源时,没有jsessionID. 就会创建一个新的session. 就取不到数据了
解决办法:
1.在写数据时,自己手动去把sessionID写到cookie当中
2.写的时候,设置持久化时间
3.注意,key值一定是和它自动生成的key值是一样的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200426122538196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pVTElBTl9f,size_16,color_FFFFFF,t_70)