web - 会话技术

news2024/11/28 5:27:15

文章目录

目录

文章目录

前言

一 . 会话

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以及域对象的相关知识,望大家多多支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9.MySQL索引的操作

个人主页:Lei宝啊 愿所有美好如期而遇 目录 索引操作 查询索引 创建主键索引 唯一索引的创建 普通索引的创建 全文索引的创建 删除索引 索引创建原则 索引操作 查询索引 第一种方法: show keys from 表名\G 我们了解其中几个就好。 第二种方法…

主从复制(gtid方式)

基于事务的Replication,就是利用GTID来实现的复制 GTID(全局事务标示符)最初由google实现,在MySQL 5.6中引入.GTID在事务提交时生成,由UUID和事务ID组成.uuid会在第一次启动MySQL时生成,保存在数据目录下的…

自动化测试的一些问题合集

问题1、 ipykernel_launcher.py: error: unrecognized arguments: usage: ipykernel_launcher.py [-h] [--id ID] [--test TEST] [--env ENV] ipykernel_launcher.py: error: unrecognized arguments: --ip127.0.0.1 --stdin9003 --control9001 --hb9000 --Session.signature_…

取消google账户银行卡支付信息Remove google payment method

在Google payment method里面(网址https://payments.google.com/)选择payment methods,然后移除即可。

SortableJS:vuedraggable实现元素拖放排序

文档:https://sortablejs.github.io/Sortable/github:https://github.com/SortableJS/SortableVue2: https://github.com/SortableJS/Vue.DraggableVue3: https://github.com/SortableJS/vue.draggable.nextnpm https://www.npmjs.com/package/vuedragga…

《低代码指南》——维格云机器人常见报错怎么解决?

在使用维格机器人调用维格表的API过程中,可能会出现机器人执行结果未达到预期的情况,此时可能是机器人运行出现了问题;通过点击这个机器人右上角的“运行历史”可以查看运行记录,通过对运行记录的分析,可以推断出问题所在,然后进行修改。 而对于运行历史的分析,主要是针…

Android NDK开发详解之调试和性能分析的ndk-gdb

Android NDK开发详解之调试和性能分析的ndk-gdb 要求用法选项 NDK 包含一个名为 ndk-gdb 的 Shell 脚本,可以启动命令行原生调试会话。偏好使用 GUI 的用户则应阅读在 Android Studio 中调试这篇文档。 要求 要运行命令行原生调试,必须满足以下要求&am…

【网络】网络层讲解

IP协议 前言正式开始IP协议报文第一行报文的封装和分离4位版本8位服务类型 第三行生存时间TTL检验和8位协议 32位源IP和32位目的IP第二行数据分片16位标识3位标志13位片偏移 网段划分网络分段的好处如何进行网络划分老版本的ABCDE新版本的CIDR特殊的IP地址IP地址的数量限制 私有…

2127. 参加会议的最多员工数 (困难,基环内向树,拓扑排序)

思路: 将每个员工作为节点,喜欢的关系作为边,显然是能够组成若干张连通图的,关键就在于如何理解一张图首先要证明:任何一个第一步构成的图必是一个有且仅有一个环的连通图(如下面图片所示,也称…

智能升降压模块

退耦电容 铝电解电容——用较小的成本获得更大的容值,但是等效电阻也大,内部有电解液的 固态电容——聚合物组成,即使失效也不会出现漏液着火等情况 选取时需要考虑精度容值,额定电压大小 一般额定电压要留有1.5倍~2倍的余量&…

生产管理系统流程是什么?

生产管理系统流程是什么? 接下来我就以我们公司正在用的简道云生产管理系统为例,为大家演示生产管理系统的流程 这是我们团队搭建的模板,需要的可以自取,可以直接使用,也可以在模板的基础上自行搭建 生产管理系统模板…

DC系列 DC:2

DC:2 文章目录 DC:2信息收集IP收集网页收集 rbash绕过提权 信息收集 IP收集 使用arp-scan 对网段进行扫描 得到目标机ip之后使用nmap -A -p- -sV -sT 10.4.7.21对该ip进行详细扫描 可以看到该目标机开放着ssh和http服务得到端口7744和80 网页收集 访问网页发现无法访问 …

操作系统 day01(概念和功能)

一. 操作系统的概念 二. 操作系统的功能和目标 作为系统资源的管理者 向上层提供方便易用的服务 操作系统给普通用户使用的接口 GUI/图形化界面联机命令接口/交互式命令接口:用户说一句,系统跟着做一句,如CMD脱机命令接口/批处理命令接口&a…

一个女软件测试工程师3年的坎坷之路

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

ATFX汇市:日本央行放松长债收益率控制,USDJPY距离历史最高价仅一步之遥

ATFX汇市:10月31日,日本央行货币政策会议结果显示:维持短期利率-0.1%不变;把10年期日本国债收益率的目标水平维持在0%左右,同时进行收益率曲线控制,上限为1%,这一收益率将作为参考,主…

【Python爬虫】selenium4新版本使用指南

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera&am…

基于springboot实现疫情防控期间外出务工人员信息管理系统项目【项目源码+论文说明】

基于springboot疫情防控期间外出务工人员信息管理系统 摘要 网络的广泛应用给生活带来了十分的便利。所以把疫情防控期间某村外出务工人员信息管理与现在网络相结合,利用java技术建设疫情防控期间某村外出务工人员信息管理系统,实现疫情防控期间某村外出…

【小白专用】PHP array_push() 函数

PHP array_push() 函数 首先创建一个数组,然后使用array_push()函数依次添加了2个元素,并使用print_r()打印出了结果。可以看到,新添加的元素都已经被成功插入到了数组的末尾。 向数组尾部插入 "blue" 和 "yellow"&…

云安全—kubelet攻击面

0x00 前言 虽然说总结的是kubelet的攻击面,但是在总结攻击面之前还是需要去了解kubelet的基本原理,虽然说我们浅尝即止,但是还是要以能给别人讲出来为基本原则。 其他文章: 云安全—K8s APi Server 6443 攻击面云安全—K8S API Server 未授…

使用doxygen分析MCAL源码的层次架构-基于YTM32

使用doxygen分析MCAL源码的层次架构-基于YTM32 文章目录 使用doxygen分析MCAL源码的层次架构-基于YTM32引言准备和安装软件生成Call Graph配置Wizard > Project页面配置Wizard > Mode页面配置Expert > Project页面配置Expert > Build页面配置Expert > Dot页面分…