浅谈cookie和session

news/2024/9/20 5:07:48/文章来源:https://www.cnblogs.com/qimoxuan/p/18316333

关于用户信息存储相关的问题

背景

先讨论Session和Cookie,我们先了解其诞生的背景,毕竟需求推动技术的!

基于以前的互联网的网络协议的请求是HTTP(无状态的网络请求协议),意味着每一个单独的请求之间是相互独立、互不相关的,服务器在处理一个请求后并不会保存任何关于客户端状态的信息。这带来的弊端就是服务端无法判断客户端发来的请求是哪个用户发起的,因此我们需要对状态保持进行额外处理,这就诞生了Cookie和Session。

Cookie

概念

Cookie(HTTP Cookie)是由服务器(服务端)发送到用户浏览器(客户端)并保存在本地计算机上的小型文本文件(可持久化)。Cookie用于存储特定网站的用户信息(状态保持),以便在用户访问同一网站时可以检索和使用这些信息。

应用场景

概念似乎晦涩难懂,以一些应用场景举例,就可能体察到Cookie的存在了

1.用户登录,存储账号密码

这个就必须是首次登录成功后,浏览器会提示用户是否要保存账号信息,这个本质就是通过Cookie进行用户信息的存储,下次就可以直接免登录操作了。

PS:免登录不是说不用通过数据库查询,而是下次登录的信息从Cookie中取出。

2.会话管理

用于检测用户是否在网站登录后进行连续操作(访问网站资源),否侧超过过期时间,则会消失,即用户就得重新校验身份。例如:哔站登录后不作任何操作,30天过需要重新登录。

3.个性化体验

这种存储个人偏好配置,采用的方案之一就有是Cookie进行的。个人偏好配置比如:暗黑模式,页面布局,语言选择等等。

作用

通过上面的介绍,Cookie的作用也应该已经呼之欲出了!这里还是总结一下~

  • 服务器识别用户,保持用户在跳转页面时会话状态的一致性。
  • 实现免登陆,自动进行身份验证
  • 保留个性化体验

存储位置

既然Cookie是存储在本机的小型文本,那么它具体存储在哪里呢?

答:不同的浏览器和不同的操作系统,Cookie存储本机的位置都是不同的。见下图(Chatgpt如是说)

 

Session

Session的中文名是会话,Session和Cookie可谓是“黄金搭档”,有了Cookie就一定有Session。

概念

会话(Session)是指在用户与服务器(服务端)之间建立的一个交互周期。它允许服务器跟踪用户在一系列请求和响应之间的状态,从而实现一定程度的状态保持。意思就是我们常说的Session是存在于服务端的一个概念,用于跟踪用户的请求和响应。

问题

浏览器的Cookie里面也有session,和服务端的Session的区别是什么?

答:前者的Session又称之为会话Cookie,他是属于浏览器进程中Session,一旦关闭浏览器,会话Cookie就会被杀死,因此是不具持久化的;后者的Session是创建于服务端,他可以被持久化,可以存储多个地方,如:内存,磁盘等。

Cookie和Session的关系

我以关系图来表示,这样显得更直观。

Session的生命周期

这里就得要分类讨论了,浏览器的Session(会话Cookie)和服务端的Session的生命周期是不一样的。

会话Cookie:浏览器端的 Session 存储在用户的浏览器中,通常在用户关闭浏览器时结束。这种 Session 只在用户的当前浏览器窗口或标签页内有效。当用户关闭浏览器时,浏览器通常会清除与该 Session 相关的 Cookie 数据。

Session:服务端的 Session 存储在服务器上,其生命周期通常由服务器的配置来控制。服务端的 Session 可以在用户的多个请求之间保持状态,而不受用户关闭浏览器的影响。

问题

1.不同用户在同一个浏览器同一个标签页发起同一个请求,sessionId相同吗?

是相同的,但这样当前的session的value会被下一个请求的session的value覆盖。(前提是session的key是相同的)
2.同一个浏览器不同的标签页发起同一个请求,sessionId相同吗?

是相同的,因为依旧遵照这同一个浏览器同一个请求,其sessionId是不变的。
3.不同浏览器发起同一个请求,sessionId相同吗?

是不同的,因为请求的对象都变了,sessionId肯定不同

口说无凭,我进行了实验,写了一个很简单的请求,进行了测试。

@GetMapping("/test")public void test(HttpServletRequest request, HttpServletResponse response) throws IOException {String id = request.getSession().getId();response.getWriter().write(id);}

Edge浏览器的SessionId:

Chrome的SessionId

总结:不管是否是同一个用户还是不同的标签,只要符合同一个浏览器同一个请求,那么的sessionId一定是相同的!

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

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

相关文章

施工行业必备:2024年值得选择的项目管理工具

国内外主流的10款施工项目进度管理软件对比:PingCode、Worktile、Contractor Foreman、建设工程项目管理平台(JSGC)、智慧工地综合管理系统、工程项目信息管理系统(GCXX)、Buildertrend、Procore、Autodesk Construction Cloud、Fieldwire、ClickUp、monday.com。在施工行…

spingboot 发布 https

1 进入jdk安装目录,我的是在C:\Program Files\Java\jdk1.8.0_311\bin 菜单栏 输入 cmd回车 2. 使用JDK自带的keytool工具生成ssl证书(这里注意JDK版本,版本向上兼容,高版本生成的密钥,不能用于低版本) keytool -genkey -alias gateway -storetype PKCS12 -keyalg RSA -ke…

thinkPHP/fastAdmin框架使用memcached缓存

1.安装memcached扩展: 2.重启PHP,在thinkPHP或者fastAdmin启用扩展(开放相应端口:例如11211) 在fastAdmin中,则需修改config.php里面的cache配置: 3.实际运行测试: 第一个信息正常显示说明运行成功,第二个显示false,说明缓存删除成功每天进步一点点

线性代数过滤的脏水

线性代数 向量 \(\to\),信息学中用形如 \[\begin{bmatrix}a_1\\a_2\\\vdots\\a_p\end{bmatrix} \]的矩阵来表示指向 \(\left(a_1,a_2,...,a_p\right)\) 的 \(p\) 维向量。 向量求和 直接就 \(\vec{a}+\vec{b}=\vec{c}\) 时满足 :投影 借用8分钟带你彻底弄懂《线性代数》-CSDN博…

谷歌为什么要用AIDL替代HIDL(HAL)?

谷歌为什么要用AIDL替代HIDL(HAL)?背景:官方:https://source.android.com/devices/architecture/aidl/aidl-hals.Google 在Android 11引入了AIDL for HALs,旨在代替HIDL原先的作用。在之后的Android版本推荐使用AIDL 实现Hal层的访问。这样做的原因,应该有以下几点:AIDL比…

Halcon的Blob分析

一、Blob分析流程及常用算子 1.基本步骤 Blob分析的基本步骤,这是一种理想状态,也是最基本的套路,获取图像->分割图像(区分前景像素和背景像素)->特征提取(比如面积、重心、旋转角度等)。 halcon代码实现如下: read_image(Image,‘particle’) threshold(Image, …

U454574

好奇怪的题,玩空洞的时候想到的,但原来草稿纸丢掉了qwq,懒,什么时候来补吧 看到这个很容易想到dp,设dp[i]为到第i个点的最小时间。然后用dp[i]更新后面。考虑判定如何从一个点走到另一个点。我们发现,平移原来的跳跃路径是没有关系的。通过数学方法和感新理解可以发现前面…

蓝牙H4传输层协议

蓝牙H4传输层协议蓝牙几种不同接口的传输协议:H2/H4/H5/BCSP/SDIO及区别 H2:基于USB的传输H4:基于五线UART(RX/TX/CTS/RTS/GND带硬件流控)的传输,最简单的传输方式,只在HCI raw data前面加上一个type;H5: 基于三线UART(RX/TX/GND)的传输,需要软件协议层加一个数据完整性校…

模块2 面向对象编程初级 --- 第四章:创建类

第四章 创建类 主要知识点:1、类的定义2、类的修饰 学习目标:掌握类的定义方法,能够编写简单的类。 4.1 类的定义问题空间元素在方法空间中的表示称为对象,面向对象的程序设计是以解决的问题中所涉及到的各种对象为主要考虑因素,更加贴近于人的思维方式,面向对象程序设计…

UOS系统部署KingbaseES V8R6 java故障“InvocationTargetException”

KingbaseES案例说明: 在UOS系统下部署KingbaseES V8R6数据库时,出现Java错误,部署失败。 系统版本: kingbase@srv01:~$ cat /etc/os-release PRETTY_NAME="UnionTech OS Server 20 " NAME="UnionTech OS Server 20 " VERSION_ID="20" VERSIO…

卷积神经网络CNN实战:MINST手写数字识别——数据集下载与网络训练

数据集下载 这一部分比较简单,就不过多赘述了,把代码粘贴到自己的项目文件里,运行一下就可以下载了。 from torchvision import datasets, transforms# 定义数据转换,将数据转换为张量并进行标准化 transform = transforms.Compose([transforms.ToTensor(), # 转换为张量t…

winform--穿梭框

新建一个用户控件: 直接上代码:/** 作者:pengyan zhang* 邮箱:3073507793@qq.com* 博客:https://www.cnblogs.com/zpy1993-09* 时间:2024-04-10 16:36*/public partial class ShuttleFrameControl : UserControl{private Color lb_BackColor { get; set; } = Color.Trans…