【JavaWeb】Cookie和Session的使用场景

news/2024/7/5 5:53:07

一、Cookie 简介

Cookie ——  浏览器提供的一种持久化存储的机制。

为什么有浏览器需要给用户提供Cookie 这种持久化存储呢,直接存硬盘不好吗,换而言之 Cookie机制到底是个啥???

早期浏览器为了避免用户访问恶意网站,进而网站内部的恶意代码可能会对用户设备上的资源造成影响,例如:植入病毒,爬取用户资源,删除用户资源…… 这些情况都可以通过网站代码对设备进行操作,联想一下网站可以上传文件,图片等资源,这是我们主动的行为,但是有些行为可以由代码自动执行。浏览器——默认不允许网站随便访问用户设备上的资源

针对上述情况,网站又需要浏览器能够存储一些关键信息,用于客户端与服务器进行交互,提高用户体验度。Cookie 主要存储的数据就是 用户的账号和密码,当用户登录进入网站后,网站服务器会先对账户进行校验,校验无误后将账户信息写回到浏览器,浏览器就会将账户信息存在 Cookie 中,当用户点击网页上的某些操作向网站的服务器发出请求时,浏览器会将 Cookie 中用户信息也附带着写入请求中,例如:张三整个用户登录了百度的网站,我们一般是游客模式,登录后用百度搜索引擎搜索了“美女”,此时服务器就可以根据 Cookie 中的信息判断当前是那个用户在操作页面——张三某年某月某日,那个IP地址,什么设备,什么浏览器,什么搜索引擎,搜索了美女 。不要随便用网页浏览啥哦,因为服务器全知道而且非常详细~

Cookie是一种用于存储用户相关信息的 “小文件” (一般来说,每个Cookie的大小限制为4KB以内),它通常由服务器发送到客户端的Web浏览器,然后由浏览器存储在本地的计算机上。当用户访问同一网站时,浏览器会将该网站相关的cookie传递给服务器,使服务器可以读取并使用其中的数据——Cookie 是以键值对的形式保存数据。

浏览器会针对每一个域名(IP 地址的映射 例如:www.baidu.com),在硬盘上划分一块空间,这块空间就是Cookie.


总结:

1. Cookie 是个啥?

浏览器提供的持久化存储的机制,防止恶意网站代码对用户设备资源造成影响,不允许网页随便访问用户资源,有的时候又希望,浏览器能持久化存储一些关键信息,用于给服务器交互,最常见的是存储用户的账户信息,所有浏览器会将针对每一个域名,在硬盘上划分一块空间,这块空间就是Cookie

2. Cookie 中的数据从哪里来?

Cookie 中的数据是从服务器返回给浏览器的,服务器代码中由程序猿决定要把啥样的信息保存到客户端这边,通过 HTTP 响应的 Set-Cookie字段,把键值对写回去。

3. Cookie 中的数据到哪里去?

Cookie 的数据会在后续的浏览器访问服务器的时候带到请求的 header 中的 Cookie 字段中发送给服务器。

4. Cookie 有什么用?

1. 便于客户端与服务器进行交互

2. 服务器可以通过 Cookie  中的信息来判断当前客户端是谁,张三还是李四,做了些什么。

5. Cookie 存储在哪儿?

存储在浏览器(客户端)所在的主机上,浏览器会根据域名来 分别存储~~


二、Session 简介

在计算机领域中,会话(Session)是指建立起来的交互式会话。它通常是指客户端和服务器之间建立的网络连接,用于在网络上进行通信,执行特定的操作和交换数据。

在Web开发中,Session (键值对的结构,Map)通常是指保存在服务器端内存中的一组数据。当用户与服务器进行交互时,服务器通过Session来识别用户并存储与该用户相关的数据。Session可以用于在多个请求之间共享数据,这样就可以在用户的浏览会话期间跨多个页面保留数据。一些常见的数据可以保存在Session中,例如用户的身份验证信息。由于Session是存储在服务器端内存中的,因此会话数据可以持久保留,即使用户关闭了浏览器,数据也不会丢失,直到Session超时或被手动删除为止。

会话也是指一种可以跨多个页面或请求保持用户数据的机制。通常情况下,会话会在用户首次访问一个网站时自动创建,在用户离开网站或超时后自动失效(创建和销毁由程序猿设计,当然 Session 也是运行在内存中的机制,服务器重启Session 中的数据就没了)。通过使用会话,Web应用程序可以轻松地跟踪用户状态,并在用户浏览网站的不同页面时保持用户信息的连续性。

举个例子:去医院看病

1. 到医院第一步,选择指定的科室挂号,医院给帮你办理一张就诊卡(现在身份证可以充当这个角色),就诊卡上包含一些个人信息:身份证信息,电话号码,住址……

2. 挂号完成之后,就可以拿着就诊卡去看病了,轮到你时,医生将你的就诊卡一刷,你的基本信息就展示在医生的电脑界面上,其中有一栏,以往病例史,为空,因为你第一次来这家医院,医院没有记录你的信息,所以此时医生就问你有啥毛病,有没有在其他医院就诊过,医生根据你的叙述在电脑上一顿狂敲,最后让你去检验科做个检测,到了检验科,医生给你做检查,检查结果出来后,医生拿着你的就诊卡刷一下,将检查结果录入你的个人信息库,最后让你去找就诊医生继续诊断,此时就诊医生都不需要你的结果报告,拿着你的就诊卡一刷,你刚才的检验结果就展现出来了,原因是医生将你的数据都存入到医院的数据库中了,就诊卡就是搜索的条件。

以上实例中 就诊卡可以认为是 Cookie ,医院给用户提供的持久化存储数据的机制,里面存储了用户的相关信息,当医生初次使用就诊卡时就会给新用户提供一组 Session 会话,会话是一组键值对的结构——Map, key  - value 模型

针对以上事例,就诊卡就可以看作为 Cookie ,存储了用户的基本信息,虽然就诊卡上可以存储一些信息,但是保存的数据毕竟是有限的,真正保存用户信息的是在医院的服务器中(依托于数据库),而就诊卡只需要存储一个身份标识即可(例如身份证号),而这个身份标识就作为 Session 的 key 键,其他更多用户信息作为 value 值,是一个 Map 的结构。

用户数据存储在医院的服务器上是靠谱的,即使是用户将就诊卡丢失,可以根据身份标识(身份证)补办一张就诊卡,而这个身份标识是作为  Session(会话)的 Key 值存在,所以,只要有身份标识,就可以在医院服务器上快速的获取到该用户全部的信息(前提是代码这样写,会话存储啥数据由程序猿设计)。

医院的服务器管理着很多的 Session(会话),每个 Session 都存储了用户的关键信息,(基本信息,要做的检查,以往病史,消费记录……),每个 Session 是都有一个 key 值—— SessionId,Cookie 中就存储了 SessionId,每一次刷卡(发出请求), 就是将 Cookie(就诊卡) 中 SessionId 作为 Session(会话) 中的 key 键, 去匹配获取 Session 的值。


三、Cookie 和 Session 之间关联和区别

关联:

在网站的登录功能中,需要配合使用,Cookie 存储用户的账户信息,为键(key), Session 是一个 map 键值对的结构,会根据 Cookie 的账户信息作为 键值,更多的用户相关的信息则是保存为 value , 每次浏览器向服务器发出请求,都会附带上  Cookie 中的数据,服务器接收到请求后就可以根据 Cookie 中的 key ,获取 Session 会话中的值,值意味着更多的个人用户信息。 所以呢我们说 Session 是在同一网站下是跨页面存储信息的机制,相当于一个网站的全局变量,触发条件就是 Cookie 中的 SessionId (用户的身份标识 /  账户信息)。

区别:

1.存储数据的不同

Cookie 是客户端的存储机制,以键值对的形式存储数据,不只是存储用户账户信息还可以存储其他的信息,例如:用户的喜好,多多刷刷美女,大数据~

Session 是服务器的存储机制,以键值对的形式存储数据(Map),是专门用来存储用户的身份信息及相关信息。

2. 使用场景的不同

Cookie 在非登录界面的场景下完全可以单独使用,不需要搭配 session (会话), 具体代码由程序猿设计实现, Cookie 不仅仅只存储 用户的账户信息(身份标识)。

Session 也可以不搭配 Cookie 使用,例如:手机 App 登录服务器,此时就没有  Cookie 的概念,因为 Cookie 是浏览器提供的一组持久化存储的机制。

3. 归属的不同

Cookie 是属于 HTTP 协议中的一部分(HTTP 协议的 header 中的一个键值对,详情可看上文中的请求图片),Session 和 HTTP 协议无关,跟 “应用程序” 有关,例如: Tomcat 是一个 Java代码实现的  HTTP 的服务器,提供的  Servlet API 是为了程序猿更好的操控 HTTP 协议, 其中 HttpSession 类就可以管理 Session 会话,这个类与 协议本身无关,与 Tomcat 有关。


春看百花秋赏月,夏沐凉风冬听雪


http://lihuaxi.xjx100.cn/news/1292442.html

相关文章

解决vmware虚拟机,克隆修改ip后,xshell连接不上问题

1、查看网卡 ifconfig2、修改网卡配置 vim /etc/sysconfig/network-scripts/ifcfg-ens32 改成与上图一样 修改后 3、重启reboot则解决

const、var、let用法

var 当使用 var 声明变量时,该变量的作用域是在最近的函数体内,而不是块级作用域(例如 if 语句、for 循环等)。这意味着在函数内部,无论变量是在函数的哪个位置声明的,它都可以被访问到。 另外&#xff0…

哪个爬虫库用的最多?

在Python中,最常用的爬虫库是requests和BeautifulSoup。requests库用于发送HTTP请求和处理响应,而BeautifulSoup库用于解析HTML文档。这两个库通常结合使用,用于爬取网页内容并提取所需的数据。其他常用的爬虫库还包括Scrapy、Selenium等。 常…

JMeter 后置处理器之JSON提取器

目录 前言: 测试环境 插件介绍 插件参数 插件使用示例 JSON-PATH表达式介绍 操作符 函数 过滤器操作符 JSON PATH示例 前言: JMeter是一个功能强大的性能测试工具,它提供了许多后置处理器来处理和提取测试结果。其中一个常用的后…

详细介绍如何使用 OpenCV 实现自动文档扫描仪--附实现源码

文末附相关源代码实现的免费下载链接 文档扫描是将物理文档转换为数字形式的过程。可以通过扫描仪或手机摄像头拍摄图像来完成。我们将在本教程中讨论如何使用计算机视觉和图像处理技术有效地实现这一目标。 在当今的计算机时代,几乎不需要任何物理文书工作。尽管如此,在仍…

网页爬虫逆向与AST入门系列教程(五、AST的应用之反爬虫技术解析)

网页爬虫逆向与AST入门系列教程 第五部分:AST的应用之反爬虫技术解析 在前面的文章中,我们介绍了AST的基本概念、生成方法以及在代码混淆解析中的应用。在本篇中,我们将探讨AST在网页爬虫逆向中另一个重要的应用领域:反爬虫技术…

Delphi7 ODAC控件连接Oracle RAC

Direct mode does not support RAC.YOU can connect only to one fixed server in RAC. ODAC 控件中的Direct模式不支持Oracle RAC,只能够链接一个确定的RAC实例。 如果要使用ODAC控件连接Oracle RAC,则需要Oracel安装客户端,并且不使用Direct模式, 链接…

element table表格支持添加编辑校验

实现效果&#xff1a; 将table表格与form表单结合使用 &#xff08;用el-form外层包裹el-table结合rules进行校验&#xff09; 代码实现 <template><div><el-card class"box-card" shadow"never"><div><el-buttonsize"m…