Session深度解析

Session详解,学习Session,这篇文章就够了(包含底层分析和使用) 什么是session session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。 session有什么用 我们先来想一个问题,这个问题就是我们在游览购物网站时,我们并没有登录,但是我们任然可以将商品加入购物车,并且进行查看,当我们退出游览器后再打开游览器进行查看,购物车中依然有我们选择的商品,这该怎么实现呢? 当然,我们可以使用cookie,但是cookie能... 阅读详情

第 1 章 简介

1. 广义的session

       中文名称会话,Http客户端和Http服务器开始通信,就会产生会话,会话过程是可以连续的,也可以是时断时续的,它会有一个时间范围,表象就是你登录一个网站,如果长时间未登录,网站会提示你,这就是对session的一种应用。

2. JavaEE中的session

       JavaEE规范中,session被定义为一个具体的接口,javax.servlet.http.HttpSession,这个接口最终由符合JavaEE规范的应用服务器来实现,如我们最常用的Tomcat、Weblogic、Websphere等,session通常是存储在服务器内存中的(也有其它存储方式,但这里只讨论这种情况),也就是说session是服务器创建的,而不是浏览器创建的(刚开始学习时,老师经常这么说,可能也是为了方便理解)。

第 2 章 生命周期

       从无到有,从有到无。

1. session的创建

1.1. session是服务器创建的对象,放在服务器内存中,那它是什么时候创建的?

       以Tomcat为例,当使用浏览器访问一个jsp时,Tomcat会先根据jsp生成java文件,再编译成class,最后运行,输出内容到浏览器,浏览器解析呈现给用户。java和class文件会放到<Tomcat安装目录>/work/Catalina/localhost/<你的应用>/org/apache/jsp/<相应包>下,比如你有个test.jsp,那么就会生成test_jsp.java文件。打开test_jsp.java,找到其_jspService方法,会看到声明了一些我们常说的jsp内置对象。

PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
JspWriter out = null;

       再往下看,会看到有一句session = pageContext.getSession();,这里生成了session对象,也就是说,访问jsp时,服务器自动生成了session对象(可以在jsp的page声明中加入session="false",禁用session)。

1.2. 服务器生成session后,浏览器下次访问,服务器怎么判断session?

       启动一个应用,访问一个jsp,这里以我本地的为例。


       初次访问服务器上的一个jsp,服务器在响应头中设置了临时cookie,并加上了一JSESSIONID(毋庸置疑,肯定是服务器给加上的,Tomcat具体代码我没有去找)。

       第二次访问jsp:


       浏览器将存储JSESSIONID的cookie随着请求一起发送到服务器,服务器通过JSESSIONID到内存中找到上次生成的session对象,从而实现客户端(浏览器)共享session。JSESSIONID也可以拼在url上,如http:///localhost:8080/testApp/test.jsp;JSESSIONID=XXXXXXXXXXXX?param1=value1,JSESSIONID可以通过request.getSession().getId()得到,url中如果有JSESSIONID,服务器就不会从cookie中取了。

       注:浏览器多个tab之间(同一域下)共享session,实际上就是临时cookie都一样,JSESSIONID都是一个。而多个窗口之间使用不同的cookie不一样,所以不能共享session。

2. session的销毁

2.1. session在服务器创建后,什么时候会消失呢?

  • 服务器被强制关闭,肯定啥都没有了,这要看服务器具体的实现,像Tomcat正常关闭(使用shutdown,而不是X掉)的话,是会对session序列化到硬盘上的,重新启动后,会读取,原有的session依然存在。

  • 程序中调用session.invalidate(),销毁当前session方法。

  • session超时,超时指的是服务器连续一段时间内(超出了应用中设置的最低时限)没有接收到session所在客户端的请求,服务器从内存中移除该session对象。

2.2. 浏览器窗口关闭,session会消失吗?

       老师通常这么告诉,很多书中也这样讲,真是偷换概念,大错特错,浏览器关闭后,只是对应服务器session的JSESSIONID消失了,而服务器再也用不到这个session,导致超时,服务器会自动销毁。

       注:本文中讨论的session只是存储在服务器内存的情况,诸如其它放在Cache中、分布式存储、持久化神马的,还没接触,也就没研究。

第 3 章 总结

  • session是消耗服务器内存的,所以要合理使用session,别什么东西都往session里放。
  • session是由服务器创建的,跟浏览器没有半毛钱关系,浏览器只是拿到一个JSESSIONID。

       本文来自:高爽|Coder,原文地址:http://blog.youkuaiyun.com/ghsau/article/details/13023425

Agent Runtime 三层抽象:Session、Harness 与 Sandbox 深度解析 Agent 运行时(Runtime)是大模型落地生产的关键基础设施,其核心在于解耦状态管理、执行逻辑与安全边界。Session 作为结构化事件日志,实现状态外置与可审计回溯;Harness 作为无状态执行器,保障升级安全与故障隔离;Sandbox 则通过临时凭证与最小权限机制,满足 SOC2、HIPAA 等强合规要求。这种分层设计正成为 AWS Bedrock AgentCore、Google Vertex AI 和 Azure AI Foundry 的事实标准,推动 agent 从 PoC 走向金融、医疗 阅读详情

相关推荐

从零构建:用Arduino和MCP2515模块搭建你的第一个CAN Bus网络

本文详细介绍了如何使用Arduino和MCP2515模块从零搭建CAN Bus网络,实现温湿度数据的传输与显示。涵盖硬件连接、软件配置、发送端与接收端代码实现,以及系统调试和进阶应用,帮助初学者快速掌握CAN总线通信技术。

d6e7f8的博客 831

Session使用和原理分析图与实现原理

6. 如果没有调用 setMaxInactiveInterval() 来指定 Session 的生命时长,Tomcat 会以 Session默认时长为准,Session 默认的超时为 30 分钟, 可以在 tomcat 的 web.xml 设置。(解读: 指的是同一个会话两次请求之间的间隔时间)1. public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。

业精于勤,荒于嬉 1745

CAN总线错误帧全解析:从数据包到硬件层的故障树分析

本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。

weixin_26742753的博客 488

【JavaWeb】Session的基本使用、原理分析、使用细节

【转载黑马教学文档】【JavaWeb】Session的基本使用、原理分析、使用细节

Zh0uKal1的博客 2610

飞牛fnOS安装1Panel后Docker容器消失?三步教你恢复数据并避免踩坑

本文详细解析了飞牛fnOS安装1Panel后Docker容器消失的问题,指出这是由于daemon.json文件被覆盖导致。通过SSH连接、修复配置文件和系统重启三个步骤,用户可以轻松恢复数据。文章还提供了预防措施和最佳实践,帮助用户避免类似问题。

yellow的专栏 869

Session详解(重点)

比如我们现在都去访问百度,我们使用双核浏览器和谷歌浏览器同时访问百度这个网址,百度那边会有两个session,因为浏览器不一样,但是只要在一个浏览器里面一直用百度的话,就没有区别。我们在设计代码的过程中,需要重写doGet和doPost方法,因为httpServlet中的doGet和doPost方法只有原生的req和resp,实现页面的数据交互的本质是重写方法,操作req和resp。(用户登录之后,只要不关掉浏览器,都在session里面,都可以去享受他的服务,无论跳到哪个网页,他的信息都会存在)

超级程序诞生的博客 9247

使用强化学习快速让AI学会玩贪食蛇游戏(轻量级二十分钟训练+代码)

如何让AI玩会贪食蛇,甚至比你厉害概述构建问题(强化学习求解的一般步骤)环境动作定义状态定义奖励设计训练奖励值收敛图效果代码 概述 所用技术:强化学习(Deep Reinforcement Learning),属于一种无监督学习,利用奖励rewardrewardreward教会智能体AgentAgentAgent在合适的场景做合适的决策。 采用算法:试过两种算法D3QN和离散版本的PPO算法,最终采用离散版本PPO算法+GAE(PPO是我用过的性能最好的算法之一) 编程语言与深度学习框架:Python3.

ZYunfei的博客 2万+

Zookeeper Session 深度解析

在分布式系统中,数据的一致性和服务的可靠性是至关重要的。假设我们正在开发一个分布式文件存储系统,系统中的多个节点需要协同工作,共同维护一个文件系统的元数据。在这个过程中,节点之间需要频繁地交换信息,以确保每个节点对文件系统的视图是一致的。然而,由于网络的不稳定性和节点可能出现的故障,节点与节点之间的通信可能会中断。为了解决这个问题,我们需要一个机制来确保节点在连接中断后能够重新建立连接,并且能够同步最新的状态信息。这就引出了Zookeeper中的Session概念。

JavaCodePro的博客 653

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 252

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(一)校园网核心交换机配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 3795

Session 对象实现原理深度解析

Session 对象实现原理深度解析

weixin_51288065的博客 1002

USB驱动(URB)

本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。

m0_49476241的博客 915

Web Session 机制深度解析

Web Session 机制深度解析

weixin_51288065的博客 1103

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Session核心API深度解析:Session、SessionRepository与事件机制

Spring Session是一个强大的会话管理框架,它提供了灵活的会话存储方案和丰富的API,帮助开发者轻松实现分布式会话管理。本文将深入解析Spring Session的三大核心API:Session接口、SessionRepository接口以及事件机制,带你全面掌握Spring Session的核心工作原理。 ## 一、Session接口:会话数据的核心载体 Session接口是Spr

gitblog_00501的博客 263

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【DDD】Spring Session 透明代理机制深度解析

透明代理是一种设计模式,让开发者使用标准API,而框架在背后处理复杂的技术实现。开发者看到的:session.setAttribute("key", "value")实际执行的:redisTemplate.opsForHash().put("session:id", "key", "value")❌错误认知// 以为需要手动操作Redis✅正确做法// 使用标准HttpSession API,让框架处理存储关注点分离: 业务逻辑与技术实现分离开闭原则: 对扩展开放,对修改关闭依赖倒置。

weixin_41899098的博客 1121

源码猎人source-code-hunter:Tomcat Session管理深度解析

在现代Web应用中,Session(会话)管理是维持用户状态的核心机制。想象一下这样的场景:用户登录电商网站,将商品加入购物车,然后继续浏览其他页面——如果没有Session机制,每次页面跳转都会丢失用户的购物车信息。Tomcat作为最流行的Java Web服务器,其Session管理实现直接关系到应用的稳定性和用户体验。 本文将深入Tomcat源码,从Session创建、存储、过期到分布式环境...

gitblog_00950的博客 1020

Cookie 与 Session 的深度解析及核心区别

Session 与 Cookie 的协作安全性优化替代方案1)核心安全风险2)防护措施1)核心安全风险2)防护措施1)身份验证多层防护2)安全 headers 强化 配置防止点击劫持: 3)日志与监控当 Session 安全风险难以管控时,可采用JWT(JSON Web Token) 或OAuth等无状态认证方案:1)JWT 原理:2)OAuth 2.0:5. 安全配置示例(以 Nginx+PHP 为例)1)Nginx 配置强化 Cookie 安全 2)PHP Session 安全

sre救赎之路 1710

Paramiko-Channel和 Session深度解析

一个 Transport 连接可以创建多个 Channel,每个 Channel 可独立作为 Session 使用。是 SSH 协议中多路复用机制的核心概念,二者密切相关但有不同的角色和用途。Session(如命令执行、Shell)必须通过 Channel 实现。在 Paramiko 中,

漫谈网络 988

session深度解析

1、session_start会使服务器产生一个临时存储session的文件(例如:在xampp服务器下的tmp文件夹中可以看到这些文件)2、如果要获取session,发起请求文件的本身也要放在服务器下,否则可能发生代码正确但获取不到session的情况3、session_destory应该是清空或者删除session文件,不过没有去看过具体细节注:一定要注意第二点!!!...

spfLinux的博客 431

Cookie与Session深度解析:原理、区别

本文聚焦Cookie与Session的核心知识点及面试高频考点,从HTTP无状态协议的本质问题出发,系统讲解Session(服务器会话)与Cookie(客户端标识)的定义、工作原理、交互流程及安全特性,结合6张关键流程图还原底层逻辑。文中整理了20+面试常见问题(含答案思路)、3类核心区别对比表,并标注了面试官重点关注的技术细节,帮助开发者全面掌握会话管理技术,轻松应对面试。

此人很懒,什么都留下了...快进来看看吧 1899

Cookie,Session,Token深度解析与联系

还在为cookie,session,token之间的“恩怨情仇”斩不断,理还乱吗?做个笔记好好梳理一下,一起学起来吧。

Young_深情不及里子的博客 935
上一篇: Cookie深度解析
下一篇: Cookie详解
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值