java会话技术

本文详细介绍了HTTP会话的概念、功能及其重要性,重点讲解了客户端的Cookie和服务器端的Session两种主要的会话管理技术。Cookie用于在浏览器和服务器之间存储和传递信息,包括设置有效期、大小和作用域等。而Session则是在服务器端保存用户数据,依赖于Cookie中的jsessionId来维持会话。同时,文章还讨论了Cookie和Session在特定情况下的处理策略,如客户端或服务器端重启时的数据保持问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

会话

  • 什么是会话?从第一次请求开始,到客户端或者服务器端其中一端断开为止,称为会话。所以,一次会话可能包含很多个请求和响应。
  • 会话的功能:在多次独立的请求响应之间,共享数据。
  • 为什么要有会话?因为HTTP每次请求都是独立的,无法知晓各自间的数据这个问题。
  • java中如何实现会话?
    • 客户端:cookie
      • 请求头:会有一个cookie
      • 响应头:会有一个set-cookie
      • 细节:
        • 多久:setMaxAge(int seconds)
          • 默认:负数,即关闭浏览器,会话销毁
          • 正数:持久化到客户端硬盘,值代表多少秒
          • 0:删除客户端存储的对应会话
        • 多大:一个cookie最大4kb
        • 数量:一个域名一般最多20个cookie
        • 类型:字符串
        • 作用范围:
          • 默认:当前项目内共享
          • setPath(String path):同一个服务器下的不同项目共享,值为服务器路径,比如:setPath("/")
          • setDomain(String path):同一个域名下,不同服务器/项目共享,比如:setDomain(".baidu.com")
      • cookie通常用在未登录情况下作身份认证
      • 特殊字符存储:URL编码解码,URLEncoder.encode()、URLEncoder.decode();
    • 服务器端:session
      • 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

      • 原理:基于cookie实现,多次请求间,前端通过cookie保存jsessionId,把id传给后端,后端通过jsessionId保证每次取的session对象是同一个,以此保证数据共享正确。

      • 多久:默认30分钟,可在服务器配置文件中修改,比如tomcat的web.xml可以修改

         <session-config>
             <session-timeout>30</session-timeout>
         </session-config>
        
      • 多大:没有明确限制

      • 数量:没有明确限制

      • 类型:任意类型

      • HttpSession可在HttpServletRequest中获取,在Spring中是内置对象,

        • void setAttribute(String name,Object value) 设值
        • Object getAttribute(String name) 取值
        • void removeAttribute(String name)删除值
      • 细节

        • 客户端重启,服务器保持,由于默认cookie销毁,会导致session获取不是同一个。
          • 解决方案:服务器端返回请求时,setMaxAge(int seconds);将cookie持久化到客户端硬盘。
        • 客户端保持,服务端重启,由于session销毁,会导致通过JSESSIONID获取不到同样的session。
          • 解决方案:服务器重启前,将session对象内的数据序列化到硬盘,服务器重庆后,将文件中的数据返序列化到内存中。以保证虽然通过JSESSIONID获取到的session对象不同了,但数据还是原来的数据。ps.tomcat已帮我们实现了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值