• WEB核心【会话技术-session】第十六章


    目录

    • 💂 个人主页: 爱吃豆的土豆
    • 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
    • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
    • 🏆人必有所执,方能有所成!

    • 🐋希望大家多多支持😘一起进步呀!

    1,会话技术-session【本阶段重点】

    1.1:简述&入门&原理

    1.2:声明周期

    1.3:常用API


    1,会话技术-session【本阶段重点】

    1.1:简述&入门&原理

    Session:保存在服务器端的会话技术。

    1,session是一个会话范围的域对象,负责进行信息的共享

     session依赖cookie传递jsessionid(给大家画张图方便理解)

     浏览器之所以能在服务器上保存数据,是因为浏览器默认情况下 和服务器上一个session对象打交道,保证浏览器访问同一个session,根据sessionid,sessionid保存在浏览器的cookie上。

    1. /**
    2. * session数据存放
    3. */
    4. public void run1(){
    5. HttpSession session = getRequest().getSession();
    6. session.setAttribute("msg","v1");
    7. }
    8. /**
    9. * session数据获取
    10. */
    11. public void run2(){
    12. HttpSession session = getRequest().getSession();
    13. Object msg = session.getAttribute("msg");
    14. System.out.println(msg);
    15. }

     

    getSession();

    如何保证浏览器可以访问同一个session:

    getSession时,会先判断请求头上存在jsessionid,如果存在jsessionid,再判断内存中session对象id 是否和 jsessionid相符,发现有jsessionid相符的,将id相同的session对象进行返回。

    注意:若请求头jsessionid不存在、或者jsessionid和内存中session的id不匹配,都会导致重新创建一个session对象,给浏览器重新写一个jsessionid的cookie

    若浏览器禁用cookie,session能用么?

    Session不能使用,因为jsessionid无法传递,使得每次浏览器访问的session对象都是新对象。

    getSession()写cookie原理:

    浏览器第一次访问session对象 或者 浏览器带有的jsessionid不对,服务器会创建新的session对象给浏览器使用,给创建新的jsessionid的cookie。

    BaseServlet和JSP中 自有jsessionid的原因:

    BaseServlet的service方法源码中,有调用getSession()

     

     

    1.2:声明周期

    正常关闭的服务器,session数据未销毁:

    正常情况下,服务器启动时,序列化文件会加载回去。(idea每次启动都会清空临时目录,将来项目只部署tomcat上)

     

    1. public void run4(){
    2. //标记当前session需要被销毁
    3. getRequest().getSession().invalidate();
    4. }

     

    1.3:常用API

     

    1. public void run5() throws IOException {
    2. PrintWriter writer = getResponse().getWriter();
    3. HttpSession session = getSession();
    4. writer.write(session.getId());
    5. writer.write(new Date(session.getCreationTime()).toLocaleString());
    6. writer.write(new Date(session.getLastAccessedTime()).toLocaleString());
    7. //session.setMaxInactiveInterval();//30分钟 30*60
    8. writer.write(session.isNew()+"");
    9. }

  • 相关阅读:
    2022-08-08 mysql慢SQL-Q18-10GB数据量-mysql/innodb测试
    Java学习 --- 面向对象之多态
    新的LLM 评价方法优化
    大数据运维实战第二十九课 Hadoop 跨集群数据迁移应用实践
    基于android的网络考试系统APP(ssm+uinapp+Mysql)
    Python学习笔记—基本语法
    从初级到进阶面试!阿里强推 Java 程序员进阶笔记,金九银十秋招求职先到先得!!
    C++常用运算符
    什么是Redis脑裂,如何解决呢
    node.js - 上传文件至阿里云oss
  • 原文地址:https://blog.csdn.net/m0_64550837/article/details/125440551