当前位置: 首页 > news >正文

web - 会话技术

文章目录

目录

文章目录

前言

一 . 会话

1.1 会话管理概述

1.2 会话管理实现手段

二 . Cookie

2.1 cookie概述

2.2 cookie的使用

2.3 Cookie的时效性

2.4 Cookie的提交路径

三 . Session

3.1 HttpSession概述

3.2 HttpSession的使用

3.3 HttpSession时效性

四 . 三大域对象

4.1 概述

4.2 域对象的使用

总结


前言

大家好,今天给大家介绍一下web中的会话技术


一 . 会话

1.1 会话管理概述

Web会话管理技术是指在Web应用程序中管理用户会话的技术。它允许Web应用程序在多个页面或请求之间保持用户的状态信息

为什么需要会话管理?

我们都知道网络之间进行通信使用的是HTTP协议,但是HTTP协议是无状态的,也就是说每个请求和响应都是独立的,服务器不会保留之前请求或响应的状态信息。这意味着在HTTP协议的级别上,服务器无法识别不同请求来自同一用户还是不同用户。

这是一个很严重的问题

为了解决这个问题Web应用程序使用会话管理技术来跟踪用户的状态。会话管理技术通过在HTTP协议之上引入额外的机制来实现会话的持久化处理。例如,使用Cookie或URL重写来在每个请求中传递会话ID,服务器使用这个ID来识别用户并存储相关的会话数据。


1.2 会话管理实现手段

Cookie和Session配合解决

  • cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息

  • session是在服务端保留更多数据的技术,主要通过HttpSession对象保存一些和客户端相关的信息

  • cookie和session配合记录请求状态

举例: 张三去银行办业务

  • 张三第一次去某个银行办业务,银行会为张三开户(Session),并向张三发放一张银行卡(cookie)

  • 张三后面每次去银行,就可以携带之间的银行卡(cookie),银行根据银行卡找到之前张三的账户(session)


二 . Cookie

2.1 cookie概述

Cookie是一种在Web浏览器和服务器之间传递的小型文本文件。它由服务器在HTTP响应中发送给浏览器,并由浏览器存储在用户的计算机上。每当浏览器向服务器发送请求时,它会自动将相应的Cookie包含在请求中。

Cookie通常用于在Web应用程序中跟踪和识别用户。通过存储在Cookie中的信息,服务器可以识别特定用户并提供个性化的服务。例如,Cookie可以用于记录用户的登录状态、购物车内容、用户首选项等。

cookie的产生

  • 服务端创建cookie,将cookie放入响应对象中,Tomcat容器将cookie转化为set-cookie响应头,响应给客户端

  • 客户端在收到cookie的响应头时,在下次请求该服务的资源时,会以cookie请求头的形式携带之前收到的Cookie

  • cookie是一种键值对格式的数据,从tomcat8.5开始可以保存中文,但是不推荐

  • 由于cookie是存储于客户端的数据,比较容易暴露,一般不存储一些敏感或者影响安全的数据

cookie中包含的信息

  1. 名称:Cookie的名称,用于在服务器端识别和访问它。

  2. 值:与Cookie相关联的值,存储在用户计算机上。

  3. 域:指定可以访问Cookie的域名。只有与域匹配的网站才能访问该Cookie。

  4. 路径:指定可以访问Cookie的路径。只有与路径匹配的页面才能访问该Cookie。

  5. 过期时间:指定Cookie的有效期。过期时间之后,浏览器将不再发送该Cookie。

  6. 安全标志:指示浏览器仅在使用安全连接(HTTPS)时才发送Cookie。


2.2 cookie的使用

准备servletA 和 ServletB

开始测试: servletA 用于给浏览器设置cookie

开始测试servletB 看看能不能取到cookie


2.3 Cookie的时效性

默认情况下Cookie的有效期是一次会话范围内,我们可以通过cookie的setMaxAge()方法让Cookie持久化保存到浏览器上

  • 会话级Cookie

    • 服务器端并没有明确指定Cookie的存在时间

    • 在浏览器端,Cookie数据存在于内存中

    • 只要浏览器还开着,Cookie数据就一直都在

    • 浏览器关闭,内存中的Cookie数据就会被释放

  • 持久化Cookie

    • 服务器端明确设置了Cookie的存在时间

    • 在浏览器端,Cookie数据会被保存到硬盘上

    • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响

    • 持久化Cookie到达了预设的时间会被释放

cookie.setMaxAge(int expiry)参数单位是秒,表示cookie的持久化时间,如果设置参数为0,表示将浏览器中保存的该cookie删除

 

2.4 Cookie的提交路径

访问互联网资源时不能每次都需要把所有Cookie带上。访问不同的资源时,可以携带不同的cookie,我们可以通过cookie的setPath(String path) 对cookie的路径进行设置

 看看我们的控制台

如果我们想要将我们设置的cookie只能访问指定路径,就需要我们设置 Cookie的提交路径

 我们正常访问servletB是携带改cookie的

 此时如果我们在创建一个servletC,我们看看还有没有这个cookie


三 . Session

3.1 HttpSession概述

HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象. 客户端在发送请求时,都可以使用自己的session. 这样服务端就可以通过session来记录某个客户端的状态了

  • 服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象

  • 后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID

  • 客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSIONID找到对应的session对象

  • 通过该机制,服务端通过session就可以存储一些专门针对某个客户端的信息了

3.2 HttpSession的使用

定义表单

 定义类servletA 和 servletB

 开始测试 访问 http://lcoalhost:8080/index.html

控制台输出

 访问servletB

getSession方法的处理逻辑  

 

3.3 HttpSession时效性

为什么要设置session的时效

  • 用户量很大之后,Session对象相应的也要创建很多。如果一味创建不释放,那么服务器端的内存迟早要被耗尽。

  • 客户端关闭行为无法被服务端直接侦测,或者客户端较长时间不操作也经常出现,类似这些的情况,就需要对session的时限进行设置了

默认的session最大闲置时间(两次使用同一个session中的间隔时间) 在tomcat/conf/web.xml配置为30分钟

 

我们可以自己在当前项目的web.xml对最大闲置时间进行重新设定

 

也可以通过HttpSession的API 对最大闲置时间进行设定

 设置最大闲置时间 session.setMaxInactiveInterval(60);

也可以直接让session失效

 session.invalidate();


四 . 三大域对象

4.1 概述

在Java Web开发中,有三个重要的域对象用于在不同的范围内存储和共享数据。这三个域对象是:

  • 请求域(Request Scope):请求域是在一次HTTP请求过程中有效的域对象。它用于在同一个请求的不同组件(如Servlet、JSP)之间传递数据。数据存储在请求对象中,可以通过请求对象的setAttribute()和getAttribute()方法来设置和获取数据。请求域的生命周期从请求开始到响应结束。

  • 会话域(Session Scope):会话域是在用户会话期间有效的域对象。它用于在同一个用户的不同请求之间共享数据。数据存储在会话对象中,可以通过会话对象的setAttribute()和getAttribute()方法来设置和获取数据。会话域的生命周期从用户登录到用户注销或会话过期。

  • 应用程序域(Application Scope):应用程序域是在整个应用程序生命周期中有效的域对象。它用于在整个应用程序的不同组件之间共享数据。数据存储在应用程序对象中,可以通过应用程序对象的setAttribute()和getAttribute()方法来设置和获取数据。应用程序域的生命周期从应用程序启动到应用程序关闭。

 


4.2 域对象的使用

域对象的API

API功能
void setAttribute(String name,String value)向域对象中添加/修改数据
Object getAttribute(String name);从域对象中获取数据
removeAttribute(String name);移除域对象中的数据

 使用场景

  • 请求转发时,请求域可以传递数据请求域内一般放本次请求业务有关的数据,如:查询到的所有的部门信息

  • 同一个会话内,不用请求转发,会话域可以传递数据会话域内一般放本次会话的客户端有关的数据,如:当前客户端登录的用户

  • 同一个APP内,不同的客户端,应用域可以传递数据应用域内一般放本程序应用有关的数据 如:Spring框架的IOC容器


总结

这篇博客给大家介绍了会话中的cookie,session以及域对象的相关知识,望大家多多支持

相关文章:

  • Android照搬,可删
  • 玻色量子签约移动云“五岳”量子云计算创新加速计划!
  • 使用 ElementUI 组件构建 Window 桌面应用探索与实践(WinForm)
  • 微服务parent工程和子工程pom文件配置注意
  • 线扫相机DALSA-相机平场矫正详细步骤
  • 一文深入了解 CPU 的型号、代际架构与微架构
  • MySQL8.0安装
  • Linux的开发环境安装配置与后端项目部署
  • 爬虫API中的滑块验证及解决方案
  • Mac终端学习
  • RK3588平台开发系列讲解(项目篇)基于yolov5的物体识别
  • Android.bp探究
  • STM32中微秒延时的实现方式
  • 【jvm】虚拟机栈之动态链接
  • JVM堆内存解析
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 10个最佳ES6特性 ES7与ES8的特性
  • angular学习第一篇-----环境搭建
  • C++入门教程(10):for 语句
  • DataBase in Android
  • es6--symbol
  • flask接收请求并推入栈
  • httpie使用详解
  • Java Agent 学习笔记
  • js操作时间(持续更新)
  • Rancher如何对接Ceph-RBD块存储
  • vue学习系列(二)vue-cli
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 基于webpack 的 vue 多页架构
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 说说动画卡顿的解决方案
  •  一套莫尔斯电报听写、翻译系统
  • Java性能优化之JVM GC(垃圾回收机制)
  • 说说我为什么看好Spring Cloud Alibaba
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #{}和${}的区别是什么 -- java面试
  • #14vue3生成表单并跳转到外部地址的方式
  • #define,static,const,三种常量的区别
  • (windows2012共享文件夹和防火墙设置
  • (二)WCF的Binding模型
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)大道至简,职场上做人做事做管理
  • (转)四层和七层负载均衡的区别
  • **PHP二维数组遍历时同时赋值
  • ./和../以及/和~之间的区别
  • .form文件_SSM框架文件上传篇
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /proc/interrupts 和 /proc/stat 查看中断的情况