引言

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) 方法可以取出状态信息。

最新文章

  1. [LeetCode] Patching Array 补丁数组
  2. 基于linux(centos)的svn环境搭建
  3. Create a Listlink
  4. Java 时间日期系列目录
  5. 手把手教你玩转Git分布式版本控制系统! (转载)
  6. js封装 与 js高级用法 问题集合
  7. (medium)LeetCode 236.Lowest Common Ancestor of a Binary Tree
  8. MFC创建非模态对话框并修改CStatic文字
  9. java静态代理与动态代理简单分析
  10. 如何提高手机APP的用户体验?
  11. struts2 标签库 介绍
  12. 潜语义分析(Latent Semantic Analysis)
  13. Android应用程序中的多个Activity的显示创建和调用
  14. LeetCode_Merge Two Sorted Lists
  15. 阅读:AirBag Boosting Smartphone Resistance to Malware Infection
  16. javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)
  17. ISO文件:AMD64和i386的区别
  18. hive 中遇到的正则
  19. FormDestroy 和 FormClose 有什么区别和联系?
  20. STL算法总览(部分)

热门文章

  1. 研发效率破局之道 Facebook工作法
  2. lms微服务框架主机介绍
  3. 【CTF】XCTF 我们的秘密是绿色的 writeup
  4. vue项目打包本地后通过nginx解决跨域
  5. 带你温习一下webpack配置
  6. 脚本加载后执行JS回调函数的方法
  7. 编译Android内核 For nexus 5 以及绕过Android的反调试
  8. hdu5025 状态压缩广搜
  9. Spring SPI 机制总结
  10. mysql-.frm,.myd,myi备份如何导入mysql