JavaWeb Session 状态管理
引言
HTTP 协议是一个无状态的协议,简单理解就是两次请求/响应无法记录或保存状态信息。但是动态 Web 项目开发是需要保存请求状态的,比如用户的登录状态,但 HTTP 协议层不支持状态保存,所以需要有状态管理解决方案来解决这个问题。
常见的状态管理解决方案如下:
隐藏表单字段
提交表单时,利用表单控件的 hide 属性(隐藏属性)可以将状态信息隐藏发送给服务器,但是缺点是需要有表单提交。cookie
客户端 cookie 保存状态信息,缺点是状态信息存放在客户端不够安全session
服务器 session 保存状态信息,cookie 存放 session id,比较安全。缺点是如果浏览器禁用 cookie 会导致 session 无法使用。url 地址重写
重写 url 地址,将 session id 作为参数存放在 url 地址后,而不是 cookie 里,以解决 cookie 禁用 session 无法使用问题。
session 状态管理原理
当客户端第一次向服务器发送 HTTP 请求时,服务器收到请求后创建一个 session 对象并生成唯一的 session id;
服务器响应时将该 session id 发送给客户端浏览器,浏览器会将 session id 存放于 cookie 中;
当客户端第二次再向服务器发送 HTTP 请求时,这时浏览器会将 cookie 里存放的 session id 一并发送给服务器;
服务器收到请求后,会取出 session id,然后从服务器管理 session 对象的 map 集合里查找 session 对象;这样两次请求/响应共享同一个 session 对象,也就是所谓的一次 session 会话
session 对象的方法
通过 setAttribute(String name, Object object)方法可以向 session 对象存放状态信息,getAttribute(String name) 方法可以取出状态信息。
最新文章
- [LeetCode] Patching Array 补丁数组
- 基于linux(centos)的svn环境搭建
- Create a Listlink
- Java 时间日期系列目录
- 手把手教你玩转Git分布式版本控制系统! (转载)
- js封装 与 js高级用法 问题集合
- (medium)LeetCode 236.Lowest Common Ancestor of a Binary Tree
- MFC创建非模态对话框并修改CStatic文字
- java静态代理与动态代理简单分析
- 如何提高手机APP的用户体验?
- struts2 标签库 介绍
- 潜语义分析(Latent Semantic Analysis)
- Android应用程序中的多个Activity的显示创建和调用
- LeetCode_Merge Two Sorted Lists
- 阅读:AirBag Boosting Smartphone Resistance to Malware Infection
- javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)
- ISO文件:AMD64和i386的区别
- hive 中遇到的正则
- FormDestroy 和 FormClose 有什么区别和联系?
- STL算法总览(部分)