Http详解--会话(15)

本文介绍了会话的概念及重要性,探讨了在不同场景中如何管理会话数据,并对比了Cookie与Session两种主要的会话技术。

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

  • 什么是会话
    • 会话可简单理解为:
      • 用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
    • 看几个场景
      • 登录场景:

        打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名)

        修改密码(输入原密码)

        修改收货地址

        .......

        问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?

      • 购物场景:

        打开浏览器 -> 浏览商品列表 -> 加入购物车(把商品信息保存下来) -> 关闭浏览器

        打开浏览器-> 直接进入购物车 -> 查看到上次加入购物车的商品 -> 下订单 -> 支付

        问题: 在购物会话过程中,如何保存商品信息??

    • 会话管理:
      • 管理浏览器客户端 和 服务器端之间会话过程中产生的会话数据。
    • 保存数据:
      • 我们会想到使用数据库保存数据,但这种保存方式不在我们问题的讨论范围,所以不考虑
      • 可以使用request域对象或者context域对象嘛?不能!!!
        • 登录场景重现:

          使用context域对象:

          小张: 输入"张三"(保存数据: context.setAttribute("name","张三")) ->用户主页(显示"张三")

          小李: 输入"李四"(保存数据:context.setAttribute("name","李四")) ->用户主页(显示"李四")

          问题: context是所有用户公有的资源!!!会覆盖数据。

          使用request域对象:

          小张: 输入"张三"(保存数据: request.setAttribute("name","张三"))- > 用户主页(显示"张三")

          问题: 一定要使用转发技术来跳转页面!!!

        • 解决办法: 新的域对象session,用它来保存会话数据!!!
  • 两种会话技术
    • Cookie技术:会话数据保存在浏览器客户端。
    • Session技术:会话数据保存在服务器端。
  • Cookie
    • Cookie通过在请求和响应报文中写入Cookie信息来控制客户端的状态;
      • Cookie会根据从服务器端发送的响应报文内一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去.
      • 服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
    • 图示
      • 没有Cookie信息状态下的请求
      • 第2次以后(存有Cookie信息状态)的请求
    • HTTP请求报文和响应报文的内容如下:
      • 请求报文(没有Cookie信息的状态
      • 响应报文(服务器端生成Cookie信息
      • 请求报文(自动发送保存着的Cookie信息

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值