15-码蚁JavaWeb之会话技术session
2018-09-27 本文已影响4人
码蚁Q
session简介
Session技术是将数据存储在服务器端的技术
会为每个客户端都创建一块内存空间存储客户的数据
客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间
Session需要借助于Cookie存储客户的唯一性标识SESSIONID
Session如何办到在一个servlet当中存数据
在别的servlet当中取出当初存储的数据
每一个用户访问服务器时,会给该用户分配他自己对应的存储空间
并且创建的存储空间有一个编号我们称为SessionID
第一次访问时, 会把对应的sessionID以Cookie的形式写给浏览器
下次再访问时, 会携带sessionID,找到当初创建的那个存储空间
在对应的存储空间当中取出数据
如何获取Session对象
HttpSession session = request.getSession();
获得专属于当前会话的Session对象
如果服务器端没有该会话的Session对象,会创建一个新的Session返回
如果已经有了属于该会话的Session直接将已有的Session返回
本质就是根据SESSIONID判断该客户端是否在服务器上已经存在session了
怎么样向session当中存取数据
Session对象也是一个域对象
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
已经学习的其它两个域对象
servletContext域
request域
session的生命周期
`创建`
第一次执行request.getSession()时创建
`销毁`
服务器关闭时
session过期/失效(默认30分钟)
是从最后一次操作结束时计时
手动销毁
session.invadate
浏览器关闭,session就销毁,这句话是不正确的
`作用范围`
默认在一次会话中,
也就是说在,
一次会话中任何资源公用一个session对象
JsessioID持久化
默认情况下,
第一次获取session对象时,
会帮你创建一个session,
可以获取该Session的ID
会自动的把id写到cookie当中
`存在的问题`
第一次访问sevlet1时存储一些数据
在第二个servlet当中直接取数据,可以直接取到
把浏览器关闭
直接到第二个servlet当中取数据,发现取不到数据了。
`原因`
因为访问的时候要求带着jsessionID.
由于默认情况下,
存储cookie是会话级别的,
关闭浏览器,就没有了。
所以再次打开浏览器。
访问资源时,没有jsessionID.
就会创建一个新的session. 就取不到数据了
`解决办法`
在写数据时,自己手动去把sessionID写到cookie当中
写的时候,设置持久化时间
注意,key值一定是和它自动生成的key值是一样的
博文全套 视频讲解 点击以下链接查看
https://study.163.com/course/courseMain.htm?courseId=1005981003&share=2&shareId=1028240359