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

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

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

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

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

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

2026/11/13 12:41:44 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻