Cookies与Session会话技术详解

news/2024/4/27 6:03:59/文章来源:https://blog.csdn.net/hachi_rt/article/details/129137032

引言:日常生活中,人和人之间沟通交流,涉及到一个词----会话,软件中一样存在会话,如:网购登录,访问公司OA系统也是不断的会话,软件中如何管理浏览器客户端和服务端之间会话过程中的会话数据呢?

一、域

域对象是实现资源之间的数据共享。

context.setAttribute("name","zhangsan");
request.setAttribute("name","zhangsan");

问题:

1.context域是所有用户公有的资源,会覆盖数据。

2.request一定要使用转发技术来跳转页面,重定向等就从request域取不到值。

解决办法:使用session域保存会话数据!

二、会话技术

Cookie技术:会话数据保存在浏览器客户端。

Session技术:会话数据保存在服务器端(HttpSession    session域)。        

三、Cookie

3.1 特点

会话数据保存在浏览器客户端。

3.2 Cookie技术核心

Cookie类:用于存储会话数据

1)构造Cookie对象

new Cookie(java.lang.String name, java.lang.String value)

2)设置cookie

void setPath(java.lang.String uri)   :设置cookie的有效访问路径

void setMaxAge(int expiry) :            设置cookie的有效时间

void setValue(java.lang.String newValue) :设置cookie的值

3)发送cookie到浏览器端保存

void response.addCookie(Cookie cookie)  : 发送cookie

4)服务器接收cookie

Cookie[]   request.getCookies()  : 接收cookie

3.3 Cookie原理

服务器创建cookie对象,把会话数据存储到cookie对象中。

Cookie cookie = new Cookie("name","value");

2) 服务器发送cookie信息到浏览器

response.addCookie(cookie);

如:

set-cookie: names=eric  (隐藏发送了一个set-cookie名称的响应头)
=response.setHeader("set-cookie",cookie.getName()+"="+cookie.getValue()+",email=eric@qq.com");

3)浏览器得到服务器发送的cookie,然后保存在浏览器端。

4)浏览器在下次访问服务器时,会带着cookie信息,举例:

 cookie: names=eric  (隐藏带着一个叫cookie名称的请求头)

5)服务器接收到浏览器带来的cookie信息

request.getCookies(); 

String name = request.getHeader("cookie");  //等同这个的封装简化

3.4 Cookie的细节

1)void setPath(java.lang.String uri)   :uri为访问路径,如/project-demo。设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

2)void setMaxAge(int expiry) : 设置cookie的有效时间。

正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!(默认负数)

零:表示删除同名的cookie数据。

3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

四、Session

4.1 引入

Cookie的局限:

1)Cookie只能存字符串类型。不能保存对象

2)只能存非中文。

3)1个Cookie的容量不超过4KB。

如果要保存非字符串,超过4kb内容,只能使用session技术!!!

Session特点:会话数据保存在服务器端。(内存中)

4.2 Session技术核心

HttpSession类:用于保存会话数据。

1)创建或得到session对象

HttpSession getSession();  

HttpSession getSession(boolean create);  

2)设置session对象

void setMaxInactiveInterval(int interval)  : 设置session的有效时间

void invalidate()     : 销毁session对象

java.lang.String getId()  : 得到session编号

3)保存会话数据到session对象

void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据

java.lang.Object getAttribute(java.lang.String name)  : 获取数据

void removeAttribute(java.lang.String name) : 清除数据

4.3 Session原理

问题: 服务器能够识别不同的浏览者!!!

现象-前提:在哪个session域对象保存数据,就必须从哪个域对象取出!!!!

浏览器1:(给s1分配一个唯一的标记:s001,把s001发送给浏览器)

1)创建session对象,保存会话数据

HttpSession session = request.getSession();      --保存会话数据 s1

浏览器1 的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1)

2)得到session对象的会话数据

    HttpSession session = request.getSession();   --可以取出 s1

新的浏览器1:(没有带s001,不能返回s1)

3)得到session对象的会话数据

    HttpSession session = request.getSession();   --不可以取出    创建s2

代码解读:

HttpSession session = request.getSession();   

既是创建session也是获取session。

过程分析:

1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID;

new HttpSession();

2)把JSESSIONID作为Cookie的值发送给浏览器保存;

Cookie cookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(cookie);   //set-cookie: JSESSIONID=sessionID

3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器;

4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

if(找到SESSIONID){

        return map.get(sessionID);

}

return session.getSession();

5)如果找到对应编号的session对象,直接返回该对象

6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

结论:通过JSESSION的cookie值在服务器找session对象!!!!!

4.4 Session细节

1)java.lang.String   getId()  : 得到session编号

2)两个getSession方法:

getSession(true) / getSession()  :

创建或得到session对象。没有匹配的session编号,自动创 建新的session对象。

getSession(false):              

得到session对象。没有匹配的session编号,返回null

3)void setMaxInactiveInterval(int interval)  : 设置session的有效时间

session对象销毁时间:

3.1 默认情况30分服务器自动回收 ; 

3.2 修改session回收时间;

3.3 全局修改session有效时间.

<session-config>

<session-timeout>1</session-timeout>

</session-config>

3.4.手动销毁session对象

void invalidate()     : 销毁session对象

4)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题.

session本质还是cookie,cookie的默认有效设置的负数,浏览器关闭cookie消失,就算session默认的有效时间是30分钟,仍然有关闭浏览器,session就消失的假象.

五、总结

1)会话管理: 浏览器和服务器会话过程中的产生的会话数据的管理。

2)Cookie技术:

new Cookie("name","value")

response.addCookie(coookie)

request.getCookies();

3)Session技术

request.getSession();

setAttribute ("name","会话数据");

getAttribute("会话数据")

总结就是:session本质是一个cookie,浏览器和服务器通过new Cookie("JSESSIONID",session.getId());传递.session.setAttribute(name.value)的值保存在服务器上,浏览器可以通过session.getId()来获得session对象,然后getAttribute("name")来获得会话数据.Cookie: JSESSIONID=022757E445720AB3A5C71FA36837557E   请求行或者响应行的信息.

 完结!

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点四种自动化测试模型实例及优缺点

一&#xff0c;线性测试 1.概念&#xff1a; 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。 &#xff08;操作&#xff0c;重复操作&#xff0c;数据&#xff09;都混合在一起。 2.优点&#xff1a; 每个脚本相对独立&#xff0…

【java】java sftp传输 ,java smb传输访问共享文件夹 集成springboot

文章目录java的sftp传输sftp注意事项java smb传输smb注意事项tips: 集成springboot与不集成springboot区别不大&#xff0c;springboot中无非是引入一个maven依赖 加一个Component注解 &#xff0c; 默认是单例&#xff1b; 复制代码前 请先认真看注意事项 java的sftp传输 依赖…

网络安全态势感知研究综述

摘要&#xff1a;随着物联网、云计算和数字化的迅速发展&#xff0c;传统网络安全防护技术无法应对复杂的网络威胁。网络安全态势感知能够全面的对网络中各种活动进行辨识、理解和预测。首先分别对态势感知和网络安全态势感知的定义进行了归纳整理&#xff0c;介绍了网络安全态…

从0探索NLP——导航帖

从0探索NLP——导航帖 人工智能是一个定义宽泛、知识组成复杂的领域&#xff0c;而NLP是人工智能领域中的一类任务&#xff0c;他在哪呢&#xff1f;Emmmmm~不能说都有涉猎只能说全都都沾点&#xff1a; 每次想要针对NLP的某一点进行讲解时&#xff0c;不讲那写细枝末节&…

全链路压力测试

压力测试的目标&#xff1a; 探索线上系统流量承载极限&#xff0c;保障线上系统具备抗压能力 复制代码 如何做全链路压力测试&#xff1a; 全链路压力测试&#xff1a;整体步骤 容量洪峰 -》 容量评估 -》 问题发现 -》 容量规划 全链路压力测试&#xff1a;细化过程 整体目…

YOLOv6-3.0-目标检测论文解读

文章目录摘要算法2.1网络设计2.2Anchor辅助训练2.3自蒸馏实验消融实验结论论文&#xff1a; 《YOLOv6 v3.0: A Full-Scale Reloading 》github&#xff1a; https://github.com/meituan/YOLOv6上版本参考 YOLOv6摘要 YOLOv6 v3.0中YOLOv6-N达到37.5AP&#xff0c;1187FPS&…

linux下安装minio

获取 MinIO 下载 URL:访问&#xff1a;https://docs.min.io/ 一&#xff0c;进入/opt 目录&#xff0c;创建minio文件夹 cd /optmkdir minio二&#xff0c;wget下载安装包 wget https://dl.minio.io/server/minio/release/linux-amd64/minio三&#xff0c;进入minio文件夹创建…

如何使用 API 工具做 Websocket 测试

在 API 测试中&#xff0c;对 Websocket 协议的支持呼声越来越高&#xff0c;今天给大家推荐一款 开源的 API 管理工具——Postcat&#xff0c;以及教教大家&#xff0c;如何利用 API 管理工具做 Websocket 测试。 在线 Demo 链接&#xff1a;Postcat - Open Source API Ecosys…

广域网技术(PAP和CHAP)

第十六章&#xff1a;广域网技术 随着经济全球化与数字化变革加速&#xff0c;企业规模不断扩大&#xff0c;越来越多的分支机构出现在不同的地域。每个分支的网络被认为一个LAN&#xff08;Local Area Network&#xff0c;局域网&#xff09;&#xff0c;总部和各分支机构之间…

音频(九)——I2S 输出正弦波

I2S 输出正弦波 PC 端&#xff1a;先生成一个正弦波数组MCU 端&#xff1a;将正弦波数组使用 I2S 输出AP 端&#xff1a;接受从 MCU I2S 端口出来的正弦波数据并测量 THDN 等数据 PC 端生成正弦波数组 原理 三角函数的公式 yAsinxy AsinxyAsinx A 表示幅值 代码实现 源…

深入浅出C++ ——容器适配器

文章目录一、容器适配器二、deque类简介1. deque的原理2. deque迭代器3. deque的优点和缺陷4. 为什么选择deque作为stack和queue的底层默认容器一、容器适配器 适配器的概念 适配器是STL六大核心组件之一&#xff0c;它是一种设计模式&#xff0c;该种模式是将一个类的接口转换…

国家级高新区企业主要经济指标(2012-2021年)

数据来源&#xff1a;国家统计局 时间跨度&#xff1a;2012-2021 区域范围&#xff1a;全国&#xff08;及各分类统计指标&#xff09; 指标说明&#xff1a;手工提取最新的中国统计年鉴数据中各个excel指标表&#xff0c;形成各个指标文件的多年度数据&#xff0c;便于多年…

SpringBoot整合Spring Security过滤器链加载执行流程源码分析

文章目录1.引言2.Spring Security过滤器链加载1.2.注册名为 springSecurityFilterChain的过滤器2、查看 DelegatingFilterProxy类3.查看 FilterChainProxy类3.1 查看 doFilterInternal方法。3.2 查看 getFilters方法。4 查看 SecurityFilterChain接口5 查看 SpringBootWebSecur…

90%的人都理解错了HTTP中GET与POST的区别

Get和Post是HTTP请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过WEB开发的人都能说出一二。 最直观的区别就是Get把参数包含在URL中&#xff0c;Post通过request body传递参数。 你可能自己写过无数个Get和Post请求&#xff0c;或者已经看过很多权威网站总结…

制造企业为何要上数字化工厂系统?

以目前形势来看&#xff0c;数字化转型是制造企业生存的关键&#xff0c;而数字化工厂管理系统是一个综合性、系统性的工程&#xff0c;波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成&#xff0c;将方方面面的…

国产真无线蓝牙耳机哪个好?国产半入耳蓝牙耳机推荐

近几年&#xff0c;生活中随处可见的有戴蓝牙耳机的人&#xff0c;而蓝牙耳机也因为使用更便捷、功能更先进受到了不少用户的喜爱。蓝牙耳机按照佩戴方式来划分&#xff0c;可以有入耳式、半入耳式、头戴式等。在此&#xff0c;我来给大家推荐几款国产半入耳蓝牙耳机&#xff0…

数字IC设计工程师是做什么的?

随着我国半导体产业的发展&#xff0c;近几年的新入行的从业人员&#xff0c;除了微电子相关专业的&#xff0c;还有就是物理、机械、数学、计算机等专业&#xff0c;很多人对这一高薪行业充满了好奇&#xff0c;那么数字IC设计工程师到底是做什么的&#xff1f; 首先来看看数…

每日一题——L1-069 胎压监测(15)

L1-069 胎压监测 分数 15 小轿车中有一个系统随时监测四个车轮的胎压&#xff0c;如果四轮胎压不是很平衡&#xff0c;则可能对行车造成严重的影响。 让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序&#…

如何通过一台 iPhone 申请一个 icloud 邮箱账号 后缀为 @icloud.com

总目录 iOS开发笔记目录 从一无所知到入门 文章目录需求关键步骤步骤后续需求 在 iPhone 自带的邮箱软件中添加账号&#xff0c;排第一位的是 iCloud 邮箱&#xff1a; 选 iCloud 之后&#xff1a; 提示信息是exampleicloud.com&#xff0c;也就是说是有icloud.com为域的邮箱…

ElementUI--Dialog 弹框的使用

第一步&#xff1a;从官方文档中拷贝一个对话框到你的页面中 <el-dialog title"为中华民族之崛起而学习" :visible.sync"dialogVisible" width"30%" :fullscreen"false" :close-on-press-escape"false" show-close:close…