知识卡片
三种会话状态存储方式的定义
内容
确认需要保存会话状态之后,存储位置大致分三种。客户会话状态:数据保存在客户端,Web应用里常见做法包括把数据编码进URL、用Cookie、把数据串行化成表单的隐藏域,或者在胖客户端里直接放进对象结构。服务器会话状态:最简单的形式是在各次请求之间直接把数据留在内存里;也可以做得更持久一些,把对象序列化后存到应用服务器的文件系统里,或存进某种共享数据源(比如一张以会话标识号为键、以序列化对象为值的简单数据库表)。数据库会话状态:同样存在服务器端,但做法不同——把会话数据拆解成多张表和多个字段,像存储真正的持久化数据那样存进数据库里。三者并不互斥,理论上可以混合使用来分别存储会话状态的不同部分,只是这样做通常会让”哪部分数据该用哪种方式”变得难以理清;即使主要采用客户会话状态以外的方式,也建议至少在客户端保留一个会话标识号,以便定位对应的服务器端或数据库中的会话数据。
结构图:
flowchart TB
A["会话状态存储方式"]
A --> B["客户会话状态<br/>URL编码/Cookie/隐藏域/胖客户端对象"]
A --> C["服务器会话状态<br/>内存/序列化对象存文件系统或共享数据源"]
A --> D["数据库会话状态<br/>拆解成表和字段,当持久数据存"]
参考来源
- 位置:《企业应用架构模式》第一部分"表述"之"第6章 会话状态"之"6.3 存储会话状态的方法"(源文件:_epub-src/OEBPS/Text/000044.html)
- 结论依据:原文说明"客户会话状态,在客户端保存数据……使用Cookie,串行化数据使其成为Web表单中的某个隐藏域……服务器会话状态,可以很简单,在各次请求之间把数据放在内存里……数据库会话状态……这种方式把会话数据分解成多个表和域,并把它保存在数据库中",直接支撑本卡结构图。
- 原始内容:数据库会话状态,也是在服务器端存储的方式,但这种方式把会话数据分解成多个表和域,并把它保存在数据库中,就像你保存更持久的数据那样。