深入分析 Session 和 Cookie

AD620单电源应变片测量电路分析 笔者最近在用AD620做应变片的压力检测电路,正好AD620的datasheet中有对于应变片压力测量的应用电路,参考该电路进行设计及实验后发现该电路存在些许问题,并对其进行了优化改进。本文纯属个人理解,供大家参考,欢迎批评指正。 AD620应用电路分析及优化 应用电路分析 AD620手册中原电路如下(加了部分标注以便分析): 该电路中,前半部分比较明显,为经典的AD620放大电路结构:四个应变... 阅读详情

点击上方“芋道源码”,选择“置顶公众号”

技术文章第一时间送达!

源码精品专栏

 

来源:http://t.cn/EvGZYz0

在Web发展史中,我们知道浏览器与服务器间采用的是http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。

所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session。而用的最多也是比较重要的就是cookie和session了。

Cookie

首先来了解cookie

是什么

cookie是浏览器保存在用户电脑上的一小段文本,通俗的来讲就是当一个用户通过http访问到服务器时,服务器会将一些Key/Value键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据通过请求头又被完整地给带回服务器,服务器根据这些信息来判断不同的用户。

也就是说,cookie是服务器传给客户端并保存在客户端的一段信息,这个Cookie是有大小,数量限制的!!

Cookie的创建

当前Cookie有两个版本,分别对应两种设置响应头:“Set-Cookie”和“Set-Cookie2”。在Servlet中并不支持Set-Cookie2,所以我们来看看Set-Cookie的属性项:

属性项属性项介绍
NAME=VALUE键值对,可以设置保存的Key/Value,这里NAME不能和其他属性项名字一样
Expires过期时间,在这个时间点后Cookie失效
Domain生成Cookie域名
Path该Cookie是在当前那个路径下生成的
Secure加密设置,设置他之后,只会在SSH连接时才会回传该Cookie
现在,我们先来了解这些属性项,其他的都说的很清楚了,我们来看看Domain有什么用:

现在,我们假设这里有两个域名:

域名A:a.b.f.com.cn 域名B:c.d.f.com.cn

显然,域名A和域名B都是f.com.cn的子域名

  • 如果我们在域名A中的Cookie的domain设置为f.com.cn,那么f.com.cn及其子域名都可以获取这个Cookie,即域名A和域名B都可以获取这个Cookie

  • 如果域名A和域名B同时设置Cookie的doamin为f.com.cn,那么将出现覆盖的现象

  • 如果域名A没有显式设置Cookie的domain方法,那么domain就为a.b.f.com.cn,不一样的是,这时,域名A的子域名将无法获取这个Cookie

综上所述,我们知道了domain的用处,聪明的小伙伴已经发现了,单点登陆就是用这个原理实现的。

好的,现在了解完了Set-Cookie的属性项,开始创建Cookie

Web服务器通过发送一个称为Set-Cookie的http消息来创建一个Cookie:

Set-Cookie: value; expires=date; path=path

这里我们思考一个问题,当我们在服务器创建多个Cookie时,这些Cookie最终是在一个Header项中还是以独立的Header存在的呢?

int size = headers.size();
for(int i = 0;i < size;i++){
   outputBuffer.sendHeader(headers.getName(i),headers.getValue(i));
}
我们可以看到,构建http返回字节流时是将Header中所有的项顺序写出,而没有进行任何修改。所以可以想象在浏览器在接收http返回的数据时是分别解析每一个Header项。

++ 接着,在客户端进行保存,如何保存呢?这里又要对Cookie进行进一步的了解。 ++

Cookie的分类

会话级别Cookie:

所谓会话级别Cookie,就是在浏览器关闭之后Cookie就会失效。

持久级别Cookie:

保存在硬盘的Cookie,只要设置了过期时间就是硬盘级别Cookie。

好的,现在cookie保存在了客户端,当我们去请求一个URL时,浏览器会根据这个URL路径将符合条件的Cookie放在请求头中传给服务器。

Session

各位客官看到这里实属不易,????,但我们还是要想想,Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有cookie值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这就是我们的session。

理解Session:

Session是基于Cookie来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登陆就保存用户信息,视具体情况),并把这个id通过Cookie存到客户端,客户端每次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是NAME为JSESSIONID的一个Cookie。

Session和Cookie

实际上,有四种方式让Session正常工作
  1. 通过URL传递SessionID

  2. 通过Cookie传递SessionID

  3. 通过SSL传递SessionID

  4. 通过隐藏表单传递SessionID

第一种情况:

当浏览器不支持Cookie功能时,浏览器会将用户的SessionCookieName(默认为JSESSIONID)重写到用户请求的URL参数中。格式:/path/Servlet;name=value;name2=value2?Name3=value3

第三种情况:

会根据javax.servlet.request.ssl_session属性值设置SessionID。

注:如果客户端支持Cookie,又通过URL重写,Tomcat仍然会解析Cookie中的SessionID并覆盖URL中的SessionID

工作原理

我们先看session工作的时序图

一、创建Session

当客户端访问到服务器,服务器会为这个客户端通过request.getSession()方法创建一个Session,如果当前SessionID还没有对应的HttpSession对象,就创建一个新的,并添加到org.apache.catalina.Manager的sessions容器中保存,这就做到了对状态的保持。当然,这个SessionID是唯一的

二、session保存

由图可知,session对象已经保存在了Manager类中,StandardManager作为实现类,通过requestedSessionId从StandardManager的sessions集合中取出StandardSession对象。

我们来看看StandardManager时如何对所有StandardSession对象进行生命周期管理

当Servlet容器关闭:

StandardManager将持久化没过期的StandardSession对象(必须调用Servlet容器中的stop和start命令,不能直接kill)

当Servlet容器重启时:

StandardManager初始化会重读这个文件,解析出所有session对象。

三、session的销毁

这里有一个误区,也是我之前的错误理解,就是我将session的生命周期理解成一次会话,浏览器打开就创建,浏览器关闭就销毁,这样理解是错的!!

session的声明周期是从创建到超时过期

也就是说,当session创建后,浏览器关闭,会话级别的Cookie被销毁,如果没有超过设定时间,该SessionID对应的session是没有被销毁的,

检查session失效

检查每个Session是否失效是在Tomcat的一个后台线程完成的(backgroundProcess()方法中);除了后台进程检验session是否失效外,调用request.getSession()也会检查该session是否过期,当然,调用这种方法如果过期的话又会重新创建一个新的session。

做个总结

相同点和不同点

相同点(有关系的地方)
  • Session和Cookie都是为了让http协议又状态而存在

  • Session通过Cookie工作,Cookie传输的SessionID让Session知道这个客户端到底是谁

不同点

Session将信息保存到服务器,Cookie将信息保存在客户端

工作流程

当浏览器第一次访问服务器时,服务器创建Session并将SessionID通过Cookie带给浏览器保存在客户端,同时服务器根据业务逻辑保存相应的客户端信息保存在session中;客户端再访问时上传Cookie,服务器得到Cookie后获取里面的SessionID,来维持状态。

参考:alibaba丛书《深入分析Java Web》



如果你对 Dubbo / Netty 等等源码与原理感兴趣,欢迎加入我的知识星球一起交流。长按下方二维码噢:


目前在知识星球更新了《Dubbo 源码解析》目录如下:

01. 调试环境搭建
02. 项目结构一览
03. 配置 Configuration
04. 核心流程一览

05. 拓展机制 SPI

06. 线程池

07. 服务暴露 Export

08. 服务引用 Refer

09. 注册中心 Registry

10. 动态编译 Compile

11. 动态代理 Proxy

12. 服务调用 Invoke

13. 调用特性 

14. 过滤器 Filter

15. NIO 服务器

16. P2P 服务器

17. HTTP 服务器

18. 序列化 Serialization

19. 集群容错 Cluster

20. 优雅停机

21. 日志适配

22. 状态检查

23. 监控中心 Monitor

24. 管理中心 Admin

25. 运维命令 QOS

26. 链路追踪 Tracing

... 一共 69+ 篇

目前在知识星球更新了《Netty 源码解析》目录如下:

01. 调试环境搭建
02. NIO 基础
03. Netty 简介
04. 启动 Bootstrap

05. 事件轮询 EventLoop

06. 通道管道 ChannelPipeline

07. 通道 Channel

08. 字节缓冲区 ByteBuf

09. 通道处理器 ChannelHandler

10. 编解码 Codec

11. 工具类 Util

... 一共 61+ 篇

目前在知识星球更新了《数据库实体设计》目录如下:

01. 商品模块
02. 交易模块
03. 营销模块
04. 公用模块

... 一共 17+ 篇

源码不易↓↓↓↓↓

点赞支持老艿艿↓↓

一文了解英伟达(NVIDIA)所有显卡芯片 英伟达(NVIDIA)的产品线庞杂繁复,从面向游戏玩家的GeForce RTX系列,到数据中心的H100、B200,再到Jetson、DRIVE等边缘智能平台,一般人很难以厘清其全貌。这篇文章将用通俗而专业的语言,一文打通英伟达显卡芯片体系,让你彻底读懂这个GPU帝国是如何运转的。 阅读详情

相关推荐

结合qtdesigner,用pyqtgraph在界面上绘制波形图(一)

思路:先画图,然后在qtdesigner上放一个容器,给这个容器添加一个布局,然后把图当作一个Widget放入布局中。二、PyUIC把test.ui转换成test.py,再新建一个load_test.py写脚本。就这么简单,基础部分就完成了。也可以给它添加样式,我知道的样式不算多,但会继续写。一、随便拖进来一个容器控件,我拖了一个Widget。要想把波形图显示在界面上,核心思想其实很简单。三、load_test.py的代码。

learninger_lt7的博客 1804

深入分析Session和Cookie

为什么需要cookie和session 在Web发展史中,我们知道浏览器与服务器间采用的是http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。 所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session。而用的最多也是比较重要的就是cookie和session了。 Coo...

weixin_33937913的博客 171

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 648

session是什么?session的由来以及session的声明周期。

许多时候我们在咨询百度或者解决一个问题的时候都会碰到如果这篇文章篇幅太长,让我们心里就会望而止步,产生厌烦,这里我想陈述一下,如果这篇文章不是你的工作领域,可以放弃,但是如果是,就要考虑这篇文章的内容复杂度,如果看的过程中心情很愉悦,那就让自己变强吧。当然简单地回答确实是可以解决我们当前的问题,但是不能让我们了解这个技术领域,你之后会出现在同一个技术上反复的咨询百度,那样会很烦的。为了防止在看本文章之前你出现这样的情况,我希望你能够完完整整的看完我的回答,相信对你会有很大的帮助!!!!许多时候我们在咨询百度

走在上坡路 1877

英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战:从安全手册到代码集成的避坑指南

本文深入探讨英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战应用,重点解析锁步核配置、ECC策略优化及SafeTlib库集成中的关键问题。通过代码示例和配置建议,帮助开发者实现ASIL D级别安全性,规避常见陷阱,提升汽车电子系统的功能安全合规性。

weixin_42558093的博客 405

直流无刷电机FOC控制算法 理论到实践 —— 理论(二)

在上一章节,我们对于FOC大体有了一个介绍,本博文将详细描述有关Clark变化、Park变化、反Park变化以及SVPWM的理论实现原理,也即相关数学运算实现。

爱出名的狗腿子 1万+

Session 的原理及其在项目中的作用

一、Session 的原理是什么? Session是一种可以维持服务器端的数据存储技术。 Session保存在服务器端;并且一般要配合cookie使用,在浏览器禁用了cookie功能,只能使用URL重写来实现session存储的功能。 二、Session共享的分类 【1】分布式系统中(集群间)session共享的问题? 由于session是在服务器端保存的,如果用户跳转到其他服...

喜欢历史的码农 1136

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

浅谈session和cookie的异同点

关于session和cookie,我的理解也很浅薄,有不足或错误的地方,希望大家指出,谢谢 首先,我们先来说说他们的相同点吧       (1):都是用来存储数据的        (2):生命周期都是一次会话(默认情况下)        (3):可以给每次提供不同的数据  不同点:      (1):保存的位置不同,cookie是在浏览器中保存的,而se

XXSession的博客 2155

赛豆科技 AIVA 汽车智能体架构演进面试题与答案

摘要 赛豆科技AIVA汽车智能体架构从座舱AI演进到整车智能体,最终实现自进化的超级智能体。其核心是"先有AI再有车"的理念,将AI作为产品主轴而非附加功能。架构设计采用端-边-云协同,确保低延迟响应;整车智能体通过Planner、Tool Registry等关键组件实现自主决策;自进化机制结合车端个性化学习和云端群体学习,并设置多重安全验证。多域协作采用分层架构,关键安全功能仍由确定性逻辑控制。该架构实现了从被动响应到主动服务的范式转变,使车辆能够持续进化。

AI天才研究院 125

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1534

session与cookie相同点和不同点

session与cookie相同点和不同点 一、cookie机制和session机制的区别   具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。   同时我们也看到,由于在服务器端保持状态的方案在...

weixin_30335353的博客 1016

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 343

深入分析理解session与cookie的作用

session与cookie在web开发中我们用到的不少了,那么关于session与cookie你有深入理解吗?今天我们就一起来看一篇关于深入分析理解session与cookie的作用的例子。 在Web发展历史中,session与cookie都是伟大的存在,其初衷都是为了记住用户在网站上的浏览信息,如果没有其他替代品的出现,几乎所有web站点都离不开session与cookie。 为什

Mreden的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

session跨页面_第26期 详解React 16的Diff策略 & 深入分析Session和Cookie

深入分析Session和Cookie在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session,而用的最多也是比较重要的就是cookie和session了。图解Chun...

weixin_39662594的博客 123

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

cookie放在请求头_深入分析Session和Cookie

为什么需要cookie和session在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session,而用的最多也是比较重要的就是cookie和session了...

weixin_39954569的博客 194

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【基础】603- 深入分析Session和Cookie

为什么需要cookie和session在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些...

pingan8787 598

cookie放在请求头_深入分析 Session 和 Cookie

(给ImportNew加星标,提高Java技能)转自:掘金juejin.im/post/5b7c1f4d6fb9a019f221ca14为什么需要cookie和session在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先...

weixin_39617685的博客 390

深入分析 Session 和 Cookie,看这篇就对了!

点击上方 "程序员小乐"关注,星标或置顶一起成长每天凌晨00点00分,第一时间与你相约每日英文Promise yourself to be so strong tha...

程序员小乐 432

apache 设置session超时时间_深入分析 Session 和 Cookie

(给ImportNew加星标,提高Java技能)转自:掘金juejin.im/post/5b7c1f4d6fb9a019f221ca14为什么需要cookie和session在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先...

weixin_39555579的博客 149

apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can disturb your peace of mind. 对自己承诺:我要强大到任何事情都无法破坏我内心的平和。 每日掏心话 每一发奋努力的背后,必是有加倍的赏赐。莫要去找借口失败,只找理由成功。也许现在你正面临一些困难,...

weixin_29023445的博客 725

【Session】深入分析session与cookie(1)

虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。     一、术语session      在我的经验里,session这个词被滥用的程度大概仅次于trans

447

session传递参数_深入分析Session和Cookie-前端面试题

在Web发展史中,我们知道浏览器与服务器间采用的是http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session,而用的最多也是比较重要的就是cookie和session了。Cookie是什么cookie是浏览器保存在用户电...

weixin_39962199的博客 220

session过期重新登陆_深入分析Session和Cookie-前端面试题

在Web发展史中,我们知道浏览器与服务器间采用的是http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重写,cookie,session,而用的最多也是比较重要的就是cookie和session了。Cookie是什么cookie是浏览器保存在用户电...

weixin_42134878的博客 807
上一篇: 重磅:JDK 11 正式发布!东半球第二全特性解读!
下一篇: ArrayList 其实也有双胞胎,但区别还是挺大的!
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值