HttpSession详解

HttpSession详解

Session可以做什么

  • 网上商城中的购物车
  • 保存登录用户的信息
  • 将数据放入到 Session 中,供用户在访问不同页面时,实现跨页面访问数据
  • 防止用户非法登录到某个页面

详解

HttpSession是Java Servlet API中用于管理用户会话的核心组件,它允许Web应用程序在服务器端存储和检索与单个用户相关的状态信息。以下是关于HttpSession的详细解释:

  1. 作用与目的

    • HttpSession主要用于解决HTTP协议的无状态特性问题,即服务器无法区分两次不同请求是否来自于同一用户。通过引入HttpSession,服务器可以在用户的一系列请求之间维持状态信息。
  2. 创建与标识

    • 当一个新用户首次访问Web应用时,如果需要启动会话,则服务器会在接收到请求后创建一个新的HttpSession实例,并为其生成一个唯一的会话ID(SessionID)。
    • SessionID通常以Cookie的形式发送回客户端,客户端后续的请求会携带这个SessionID,服务器依据SessionID识别出属于同一个用户的多个请求之间的关联性。
  3. 存储与管理

    • HttpSession对象存储在服务器端,可以存放任意类型的对象属性,开发者可以通过setAttribute()方法将数据放入会话,然后通过getAttribute()方法从会话中获取数据。
    • Web容器(如Tomcat、Jetty等)内部会维护一个“session列表”,即session池,用于管理所有活跃的HttpSession实例。
  4. 生命周期

    • 会话的生命周期始于创建并分配SessionID之时,结束于以下几种情况之一:
      • 开发者明确调用invalidate()方法销毁会话。
      • 用户关闭浏览器(实际取决于浏览器的行为,有些情况下不关闭也会因为超时而失效)。
      • 服务器配置的会话超时时间到达,会自动清除未活动的会话。
      • 服务器关闭或者重启(对于非持久化的会话数据来说,这些数据将会丢失)。
  5. 获取会话

    • 在Servlet中,可以通过HttpServletRequest对象的方法获取HttpSession:
      HttpSession session = request.getSession(); // 如果不存在则创建新的会话
      HttpSession session = request.getSession(true); // 同上,布尔参数true表示如果没有就创建
      HttpSession session = request.getSession(false); // 如果不存在则返回null
  6. 安全性

    • SessionID的安全性很重要,因此许多Web容器会对SessionID进行加密处理,以防被篡改或恶意利用。
    • 为了提高安全性,还可以配置HttpSession的超时时间以及使用HTTPS来传输SessionID,防止在网络中被窃听。
  7. 跨域共享

    • 默认情况下,HttpSession是在单一Web应用程序的上下文中有效的。但在集群环境中,为了使多个服务器节点间能够共享会话,需要采取分布式缓存或其他方式同步Session信息。

原理图

image.png

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值