Session原理

 

一、Session 是干啥的?

Session 是 服务器记录 “用户会话状态” 的工具,简单说:

  • 让服务器知道 “哪些请求来自同一个用户”;
  • 能存用户专属数据(如登录状态、购物车 ),跨页面 / 请求共享。

二、Session 工作流程(结合流程图)

1. 第一次请求(用户登录)
  • 浏览器:用户访问登录页面(如 login.jsp ),发送第一次请求(带用户名、密码 )。
  • 服务器:验证通过后,创建 Session 对象(存用户数据,如 session.setAttribute("user", "张三") ),并生成一个唯一标识 JSESSIONID(类似 “用户身份证号”)。
2. 第一次响应(返回 JSESSIONID)
  • 服务器:通过 Response 对象,把 JSESSIONID 放到 Cookie 里,随响应发送给浏览器。
  • 浏览器:自动接收 Cookie,保存 JSESSIONID(后续请求会自动带上它 )。
3. 后续请求(自动带 JSESSIONID)
  • 浏览器:之后访问服务器的任何页面(如 home.jspcart.jsp ),都会自动在请求里带上 Cookie 中的 JSESSIONID
  • 服务器:根据 JSESSIONID,找到对应的 Session 对象,从而识别 “这是之前登录的那个用户”,继续使用 Session 里存的数据(如用户信息、购物车 )。

三、核心关键点拆解

1. JSESSIONID 的作用
  • 是 Session 的 “唯一身份证”,服务器通过它区分不同用户的 Session。
  • 浏览器和服务器靠它 “认亲”:只要 JSESSIONID 一致,就认为是同一个用户的请求。
2. Cookie 的角色
  • Cookie 是 浏览器存储 “小数据” 的工具,这里用来存 JSESSIONID。
  • 浏览器会 “自动管理” Cookie:收到服务器发的 JSESSIONID 后,后续请求会自动带上,无需开发者手动处理。
3. Session 对象的生命周期
  • 创建:用户第一次请求时,服务器自动创建(如登录成功时 )。
  • 销毁
    • 用户主动退出(调用 session.invalidate() );
    • 会话超时(默认 30 分钟无操作,可通过 session.setMaxInactiveInterval() 设置 );
    • 服务器重启(若没做持久化,Session 会丢失 )。

四、举个实际例子(登录 → 访问首页)

  1. 用户登录

    • 浏览器请求 login.jsp,提交用户名 张三、密码 123
    • 服务器验证通过,创建 Session:
      <% 
      session.setAttribute("user", "张三"); // 存用户信息到 Session
      String jsessionId = session.getId(); // 获取 JSESSIONID(如:ABC123)
      %>
      
    • 服务器通过 Response 把 JSESSIONID=ABC123 放到 Cookie,返回给浏览器。
  2. 浏览器存 Cookie
    浏览器收到响应后,自动在 Cookie 里保存 JSESSIONID=ABC123

  3. 访问首页

    • 浏览器请求 home.jsp自动带上 Cookie:JSESSIONID=ABC123
    • 服务器根据 JSESSIONID 找到对应的 Session,取出用户信息:
      <% 
      String user = (String) session.getAttribute("user"); // 张三
      out.println("欢迎您:" + user); 
      %>
      

五、Session 的优缺点

优点:
  • 用户状态管理方便:直接存对象(如用户信息 ),跨页面共享;
  • 数据安全:Session 存在服务器端,浏览器只存 JSESSIONID,相对安全。
缺点:
  • 服务器资源消耗:每个用户的 Session 都占服务器内存,用户多了会有压力;
  • 依赖 Cookie:若用户禁用 Cookie,Session 会失效(需用 URL 重写等方式兼容 );
  • 会话超时问题:若用户长时间不操作,Session 会过期,需重新登录。

六、总结:Session 原理的核心逻辑

Session 靠 “JSESSIONID(身份证) + Cookie(传递身份证的信使)” 实现用户会话跟踪:

  1. 第一次请求,服务器发 JSESSIONID 给浏览器;
  2. 后续请求,浏览器自动带 JSESSIONID 找服务器;
  3. 服务器通过 JSESSIONID 识别用户,使用 Session 里的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值