美文网首页Java 杂谈码蚁IT
15-码蚁JavaWeb之会话技术session

15-码蚁JavaWeb之会话技术session

作者: 码蚁Q | 来源:发表于2018-09-27 21:26 被阅读4次

    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

    相关文章

      网友评论

        本文标题:15-码蚁JavaWeb之会话技术session

        本文链接:https://www.haomeiwen.com/subject/ryuyoftx.html