【转载】会话管理
一、会话管理的概念和基本原理一为什么进行会话管理Web应用程序基于HTTP协议HTTP基于请求/响应模式– 所有请求都是相互独立的无连续性的HTTP是无连接的协议– 限制每次连接只处理一个请求HTTP是无状态的协议– 协议对于事务处理没有记忆能力二会话管理的产生对于简单的页面浏览或信息获取HTTP协议即可胜任– 浏览资讯– 查看在线图书目录对于需要客户端和服务器端多次交互的网络应用则必须记住客户端状态– 网上的购物车– 用户登录三会话管理概念会话就是一个客户端连续不断地和服务器端进行请求/响应的一系列交互。多次请求间建立关联的方式称为会话管理或会话跟踪。会话状态指服务器与浏览器在会话过程中产生的状态信息。四会话的实现过程HTTP没有提供任何记住客户端的途径服务器如何建立、维护与客户端的会话当服务器接收到客户端的首次请求时服务器初始化 一个会话并分配给该会话一个唯一标识符。在以后的请求中客户端必须将唯一标识符包含在请求中服务器根据此标识符将请求与对应的会话联系起来。二、使用Cookie、隐藏域、URL重写实现会话管理一会话管理使用Cookie所有的HTTP消息不管是请求还是响应均包含头信息。当服务器返回响应给客户端时Servlet容器把会话的信息添加到响应头信息中。客户端浏览器接收到响应后提取头信息并将其存储在本地机中以后发送请求时会自动将该信息带回服务器端。浏览器存储在客户端机器上的头信息称作Cookie它以“属性名属性值; …”方式组成文本信息。1. 示例使用Cookie实现用户登录2. 创建并向客户端发送Cookie创建Cookie对象调用Cookie的构造方法给出Cookie的名称和Cookie的值二者都是字符串Cookie cnewCookie(userName,a1234)设置最大时效如果要告诉浏览器将Cookie存储到磁盘上而非仅保存在内存中使用setMaxAge方法(参数为秒数)c.setMaxAge(60*60*24*7)//一周(正数)将Cookie放入到HTTP响应中使用response.addCookie(c)如没有这一步将不会有任何Cookie被发送到浏览器3. 从客户端读取Cookie调用request.getCookies得到Cookie对象组成的数组循环数组调用每个对象的getName找到想要的cookie根据应用程序调用getValue方法使用这个CookieCookie[]cookiesrequest.getCookies();if(cookies!null){for(Cookie cookie:cookies){if(userId.equals(cookie.getName())){//doSomethingWith(cookie.getValue());}}}4. Cookie的方法函数功能补充说明getMaxAge()读取Cookie到期时间(秒)- 如果值为0表示删除对应的Cookie- 如果值为负数表示Cookie只适用于当前的浏览会话- 默认值为-1setMaxAge()设置Cookie到期时间(秒)-getName()读取Cookie的名称不存在setName() 方法getValue()读取与Cookie关联的值-setValue()设置与Cookie关联的值如果重新设置了某Cookie的值需要用addCookie()方法将其发送回去5. Cookie的优缺点优点– 可配置到期规则数据可持久保存–不需要服务器资源数据保存在客户端– 简单性基于文本的Key-Value对缺点– 大小受到限制(总数300;20/站点;4KB/Cookie)–用户可禁用客户端接收Cookie的功能– 潜在的安全风险二会话管理使用隐藏的表单域思想通过使用隐藏域由浏览器主动告知服务器多次请求间必要的信息如在线问卷作答优点Cookie被禁用或者根本不支持的情况下依旧能够工作缺点–关掉网页后会遗失先前的请求信息– 所有的页面必须是表单提交之后的结果三会话管理使用URL重写思想– 当服务器响应浏览器上一次请求时将某些相关信息以超链接方式响应给浏览器超链接中包括请求参数信息– 由于GET方式发送请求通常URL重写用于简单客户端信息保留或辅助Session会话管理三、Session会话管理的原理和技术实现一Session在Servlet中进行会话管理可以使用HttpServletRequest的getSession()方法取得HttpSession对象(简称为Session)通过设置/获取服务器端Session对象的属性来保留请求之间的相关信息。Servlet容器提供Session接口来代表服务器端和客户端的会话。当一个WEB服务器为客户端开始一个会话时创建一个新的Session对象(含有特殊ID称为Session ID默认用Cookie存放在浏览器中。在Tomcat中Cookie的名称为JSESSIONID)。Session将数据存储在服务器的内存中供以后来自同一个客户端的请求使用。二示例使用Session实现用户登录三使用Session对象通常分三个步骤获取一个与请求相关联的会话HttpSession session request.getSession();从Session中设置或获取一个属性–session.setAttribute(“userName”,userName);–session.getAttribute(“userName”);根据需要关闭会话–session.invalidate();–通常客户端不提供结束会话的通知而是Servlet容器在用户处于一段非活动期后就会自动的使会话失效——这个时间段称为会话的超时期。四会话失效Session对象失效当用户超出指定会话期时间处于非活动状态时会话自动结束。– setMaxInactiveInterval()设置会话的超时期– 通过web.xml的 session-timeout标签设置– 使用方法invalidate()Cookie失效– 默认关闭浏览器Cookie消失– 在web.xml中设定存储Session ID的Cookie存活期限五Session与URL重写当用户浏览器禁用Cookie时仍打算运用Session来进行会话管理可以对所有的URL使用URL重写。六Session的方法方法功能getAttribute()从会话对象中提取出一个之前存储的属性值。如果没有找到与名称相关联的值则返回nullsetAttribute()设置会话对象的属性名称和属性值removeAttribute()移除与名称关联的值getAttributeNames()返回会话中所有属性的名称getId()返回唯一的标识符isNew()确定会话对于客户来说是否为新创建getCreationTime()返回会话创建的时间getLastAccessedTime()返回客户端最近一次发送请求的时间getMaxInactiveInterval()取得会话的超时期setMaxInactiveInterval()设置会话的超时期invalidate()废弃当前的会话

相关新闻

Unity热更新方案深度对比:HybridCLR与ILRuntime的性能、原理与选型指南

Unity热更新方案深度对比:HybridCLR与ILRuntime的性能、原理与选型指南

1. 项目概述:Unity热更新方案的选择困境在Unity项目开发的中后期,尤其是上线运营阶段,“热更新”几乎是一个绕不开的话题。无论是修复线上紧急Bug,还是快速迭代新功能,绕过应用商店漫长的审核流程,直接向用…

2026/10/17 9:30:22 阅读更多 →
深入解析Objective-C Block的本质与内存管理

深入解析Objective-C Block的本质与内存管理

1. Block的本质:从语法糖到运行时对象 第一次看到Block语法时,很多人会误以为它只是Objective-C的一种特殊语法。实际上,Block是苹果在LLVM编译器和运行时层面实现的完整对象体系。通过clang重写命令可以看到,一个简单的Block声明…

2026/10/16 19:19:02 阅读更多 →
ATSC、DVB、ISDB三大数字电视标准核心技术对比与演进解析

ATSC、DVB、ISDB三大数字电视标准核心技术对比与演进解析

1. 从“雪花屏”到“高清视界”:数字电视标准的演进脉络 十几年前,家里那台笨重的CRT电视,一到信号不好的时候就满屏“雪花”,滋滋作响,是很多人的共同记忆。那个时代,我们接收的是模拟电视信号&#xff0c…

2026/10/16 23:20:05 阅读更多 →

最新新闻

CSS Grid原生瀑布流布局与降级方案完整指南

CSS Grid原生瀑布流布局与降级方案完整指南

1. 项目背景与需求拆解1.1 为什么瀑布流布局值得重新写一份指南瀑布流布局(也称 Masonry Layout)从 Pinterest 时代火到现在,一直是前端页面展示图片、卡片、短视频信息流的重要形式。它的核心特征就是列等高、行不等高,元素按顺序…

2026/10/17 9:31:40 阅读更多 →
MySQL体系结构拆解:从分层原理到典型故障排查

MySQL体系结构拆解:从分层原理到典型故障排查

1. 体系结构不是拿来背的,是拿来定位问题的刚入行那阵子,我也背过MySQL体系结构图:连接层、服务层、存储引擎层、物理文件层,一层一层画得整整齐齐。但说实话,那时候背下来纯粹是为了面试,真正让我意识到这…

2026/10/17 9:31:40 阅读更多 →
Grix实战:SQL慢查询优化与复合索引智能推荐

Grix实战:SQL慢查询优化与复合索引智能推荐

1. 项目概述:这不是培训,是“带人打仗”的实战生产线Grix 这个名字,在数据库工程师圈子里已经不是新鲜词了。它不是个通用型低代码平台,也不是那种拖拽生成CRUD的玩具系统——它是一套为高并发、强一致性、复杂事务场景量身定制的…

2026/10/17 9:31:40 阅读更多 →
Figma组件化设计实战:从自动布局到原型交互的效率革命

Figma组件化设计实战:从自动布局到原型交互的效率革命

写 Figma 学习笔记,是给自己定的一个固定输出习惯。上一期我把界面布局、画板、图层、布尔运算这些基础操作梳理了一遍,这一期“02”想聊聊真正让 Figma 和传统设计工具有本质区别的东西:组件系统、变体、自动布局、约束、原型交互&#xff0…

2026/10/17 9:31:40 阅读更多 →
AI日报 - 2025年10月31日:用 TaoToken 统一 Key 跑通多模型日报生成链路

AI日报 - 2025年10月31日:用 TaoToken 统一 Key 跑通多模型日报生成链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:31:40 阅读更多 →
Windows/Linux/Docker三平台MySQL安装全攻略:从MSI到二进制包避坑实践

Windows/Linux/Docker三平台MySQL安装全攻略:从MSI到二进制包避坑实践

1. 先想清楚你需要在哪个平台怎么装MySQL的安装方式看着五花八门,其实掰开揉碎就那么几条路。我在不同环境里折腾过很多次,从本地开发机到生产服务器,从Windows笔记本到Linux虚拟机,每种装法都有它对应的场景和坑。这篇文章就把我…

2026/10/17 9:30:40 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →