Java 杂谈码蚁IT

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

上一篇下一篇

猜你喜欢

热点阅读