Java Web -> 会话管理

目录

1. 引入

2. 4种常用会话管理技术

2.1 URL重写(后端处理)

2.2 隐藏域(前端处理)

2.3 Cookies

2.4 HttpSession


1. 引入

默认情况下,WEB服务器无法区分一个HTTP请求是否为第一次访问。

  • 因此,我们通过会话跟踪(请求一次就可以跟踪请求)的方式,来记录是否为第一次访问。
    • 第一次请求输入登录信息,之后再次请求时,便可跟踪到上一次的请求,无需再次输入验证信息,直接登录。直到关闭浏览器或退出访问。

2. 4种常用会话管理技术

  • 2.1 URL重写(后端处理)

    • 将一些请求参数(通常为key=value的形式),添加到URL的查询字符中
    • 缺点
      • 浏览器会对URL的长度进行一定的限制,不适用于请求参数过多的情况
      • 静态页面需要使用JavaScript在前端页面上获取参数,麻烦,难度大
      • 特殊字符不容易处理,需要对其进行编码,才能保证字符的安全性
      • 由于信息的安全性,以及URL重写的可见性,不适用想要对信息进行保密的情况
    • 适用场景
      • 信息仅在少量页面间传递,且信息不敏感。
  • 2.2 隐藏域(前端处理)

    • 类似于URL重写,但是将值放到HTML表单的隐藏域中。
    • 外部看不到,只有服务端能看到
    • 注意
      • 和url一样,控制页面之间的跳转尽量不要超过三个
    • 优点
      • 没有字符数限制
      • 无需额外的编码
  • 2.3 Cookies

    • 特点
      • 是一个信息片段,可以自动的在浏览器和Web服务期间交互。
      • 可存储在多个页面间传递的信息
    • 过程
      • 将信息存储到浏览器上,给浏览器存储一个cookie的片段,浏览器会在每次发请求的时候,将片段传给服务器。
    • 为了安全考虑,可以设置Cookies的有效时间
    • Cookies是数据片段,也有限制,通常支持每个网站20个Cookies。
    • Cookies的删除
      • 没有办法直接的删除Cookies,可以通过设置有效时间间接进行删除
        • 即,将存活时间设置为0秒 -> 立即过期(删除)
          • cookies.setMaxAge(0);之后,resp.addCookie(cookies);
  • 2.4 HttpSession

    • 打开浏览器访问页面,就为浏览器建立了一次会话,建立了HttpSession。
    • 特点
      • 一个用户可以有且仅有一个HttpSession,且不会被其他用户访问到。
      • 只在第一次访问时,自动创建
      • 可以跨所有页面
    • 存储数据要求
      • 存放至HttpSession的值,是存储在内存中的。
      • 可以放大对象,但不应该放特别大的对象或太多的对象,否则内存占比特别大。这时,servlet容器可能将其存储在二级存储上(磁盘),可能会存在性能问题。
      • 存放的数据是Object类型,当内存不够就会存储至磁盘、文件或数据库中,这就需要序列化技术。对象需要实现序列化接口。
    • 原理
      • HttpServlet会话跟踪依赖于cookie
      • 一旦创建HttpServlet对象,Servlet容器就会为每个HttpSession自动生成唯一标识,是名为JSESSIONID的cookie的value。
      • 把这个cookie给浏览器,浏览器就有了jsessionid的cookie,浏览器在每次发送请求时,都会将cookie发送给服务端
        • 发送两种方式
          • 请求头的方式
          • 将参数加到URL上(URL重写)
      • 根据jsessionId,服务端就可以识别给请求是由那个用户发起的
      • 封装后,将cookie放入session,根据getAttrubution获取到值。
    • 有效性
      • 在web.xml中设置过期时间,使其不永久有效
      • 不失效危害
        • HttpSession占用堆内存,导致堆内存消耗、负载量过大。
      • 不配置过期时间,使用容器默认配置(30分钟)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值