【转载】会话管理
一、会话管理的概念和基本原理一为什么进行会话管理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/8/12 19:40:13 阅读更多 →
深入解析Objective-C Block的本质与内存管理

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

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

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

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

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

2026/8/12 19:40:12 阅读更多 →

最新新闻

ICC2学习笔记之Clock Tree Synthesis

ICC2学习笔记之Clock Tree Synthesis

参考资料ICC2 User Guide Version M-2016.12-SP4• Prerequisites for Clock Tree Synthesis做时钟树的先决条件:1.定义了create_clock或create_generated_clock2.已经placement且合法化且满足QoR,满足QoR包括:Congestion;Timing&…

2026/8/12 20:32:36 阅读更多 →
小熊猫Dev-C++终极配置手册:从零搭建高效C/C++开发环境

小熊猫Dev-C++终极配置手册:从零搭建高效C/C++开发环境

1. 项目概述:为什么你需要一份终极配置手册?如果你刚刚接触C或C编程,或者从其他语言转过来,那么Dev-C这个名字你一定不陌生。它可能是很多人的第一个C语言集成开发环境(IDE)。界面简单,安装包小…

2026/8/12 20:32:36 阅读更多 →
深入解析BG3ModManager:5个关键技巧打造完美《博德之门3》模组体验

深入解析BG3ModManager:5个关键技巧打造完美《博德之门3》模组体验

深入解析BG3ModManager:5个关键技巧打造完美《博德之门3》模组体验 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 《博德之门3》作为近…

2026/8/12 20:32:36 阅读更多 →
免费获取官方教材PDF:国家中小学智慧教育平台电子课本下载器完全指南

免费获取官方教材PDF:国家中小学智慧教育平台电子课本下载器完全指南

免费获取官方教材PDF:国家中小学智慧教育平台电子课本下载器完全指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容…

2026/8/12 20:32:36 阅读更多 →
HS2-HF_Patch汉化补丁:一站式解决Honey Select 2本地化与增强需求

HS2-HF_Patch汉化补丁:一站式解决Honey Select 2本地化与增强需求

HS2-HF_Patch汉化补丁:一站式解决Honey Select 2本地化与增强需求 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日语界面而…

2026/8/12 20:32:35 阅读更多 →
Vite 产物诊断要不要上 AI:先让确定性插件干完活

Vite 产物诊断要不要上 AI:先让确定性插件干完活

Vite 产物诊断要不要上 AI:先让确定性插件干完活 构建链路中既有适合规则化处理的任务,也有需要人工分析的模块边界问题。无论是否使用 AI,都不应让它自动修改生产构建配置。 构建链优化,到底哪些该用死命令和静态脚本&#xff…

2026/8/12 20:31:35 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →