主题
HTTP_SESSIONS HTTP Session 持久化存储表
记录 HTTP Session 的会话 ID、登录用户、创建时间、最近访问时间、过期时间、IP 地址、集群节点、客户端信息和序列化会话数据。该表用于分布式 Session 持久化、在线用户统计、登录审计和异常访问排查。
系统支持三种会话存储模式,通过系统设置 sys.session.store 配置:
- 内存模式(
memory):Session 存储在 JVM 内存中,重启丢失,单节点模式下使用。 - DB 模式(
db):Session 持久化到本表,集群节点共享读写,不需要额外中间件。 - Redis 模式(
redis):Session 存储在 Redis,读写性能最高,需要提前部署 Redis。
选择建议:单机开发用内存模式;生产集群有 Redis 优先用 Redis 模式,没有 Redis 用 DB 模式。 极端情况下可通过 JVM 参数 -Dsucc.sessionStore=memory 强制切换到内存模式。
会话数据、IP 地址和客户端信息属于安全审计数据,不应公开给无关人员。
位置
模型路径:/sysdata/data/tables/sec/HTTP_SESSIONS.tbl
物理表名:SZSYS_5_HTTP_SESSIONS
表结构
| 字段名 | 字段类型 | 字段描述 |
|---|---|---|
| SESSION_ID | VARCHAR(128) | HTTP Session ID,主键 |
| USER_ID | VARCHAR(64) | 当前登录用户 ID |
| IP_ADDRESS | NUMBER(16) | 登录或最近访问时记录的 IPv4 地址 |
| CLUSTER_NODE | VARCHAR(128) | 会话创建时所在集群节点,关联 CLUSTERNODES |
| USER_AGENT_ID | NUMBER(8) | 登录设备的 User-Agent 标识,关联 USER_AGENTS |
| CREATE_TIME | TIMESTAMP | 会话创建时间 |
| LAST_ACCESS_TIME | TIMESTAMP | 最近访问时间 |
| EXPIRY_TIME | TIMESTAMP | 会话过期时间 |
| SESSION_DATA | BLOB | 序列化后的 Session 属性数据(Apache Fury 序列化) |
Session ID 格式
格式为 <PREFIX>-<HASH8><UUID24>,无前缀时省略横线:
PREFIX— 认证渠道前缀HASH8— 标识符的 8 位十六进制哈希,携带用户特征UUID24— 随机 UUID 去横线后取后 24 位
| 前缀 | 认证类型 | 说明 | HASH8 输入 |
|---|---|---|---|
| PAT | bearer | PAT / Bearer Token | userId@userDirectory |
| PW | url_password | 账号密码登录 | userId@userDirectory |
| CERT | cert | 证书授信应用登录 | appId |
| AUTH | access_token | OAuth2 access_token | appId |
表索引
| 类型 | 名称 | 字段列表 | 是否唯一 | 说明 |
|---|---|---|---|---|
| 主键 | PRIMARY | SESSION_ID | 是 | 唯一标识一条 HTTP Session 记录 |
| 索引 | - | - | - | 该表未定义其他索引 |
使用注意
- 无论哪种存储模式,系统都会向本表写入一条记录用于在线用户统计和登录审计。区别在于:DB 模式会写入
SESSION_DATA字段保存完整的 Session 属性数据;Redis 和内存模式只写入用户 ID、时间、IP 等元数据字段,不写SESSION_DATA。 SESSION_ID是 HTTP Session 的唯一标识,和业务用户 ID 不是同一概念。格式见 Session ID 格式。CREATE_TIME在会话创建时写入,不再变更。LAST_ACCESS_TIME每次请求结束时更新,用于活跃度统计和缓存版本号判断。EXPIRY_TIME标记会话过期时间。过期会话不会立即删除,查询时通过EXPIRY_TIME > now()过滤,历史数据由后台任务或手动清理。SESSION_DATA为 BLOB,存储 Apache Fury 序列化的 Session 属性。仅应由SessionRepository读写,业务查询不要依赖其内部格式。CLUSTER_NODE记录会话创建时所在节点。分布式模式下会话可在任意节点恢复(会话漂移),此时该字段仍是创建节点,不代表当前服务节点。IP_ADDRESS存储为整数格式的 IPv4 地址,方便按 IP 范围查询审计日志。
