主题
HTTP_SESSIONS HTTP Session 持久化存储表
记录 HTTP Session 的会话 ID、登录用户、创建时间、最近访问时间、过期时间、IP 地址、集群节点、客户端信息等信息。该表用于会话管理、在线用户统计、登录审计和异常访问排查。
系统支持两种会话存储模式,通过 JVM 参数 -Dsucc.sessionStore 配置:
- 默认模式(
default):Session 持久化到本表,集群节点共享读写,不需要额外中间件。 - Redis 模式(
redis):Session 存储在 Redis,需要提前部署 Redis。
选择建议:生产集群有 Redis 优先用 Redis 模式,没有 Redis 用默认模式。未配置或配置未知值时使用默认模式。
会话数据、IP 地址和客户端信息属于安全审计数据,不应公开给无关人员。
位置
模型路径:/sysdata/data/tables/sec/HTTP_SESSIONS.tbl
物理表名:SZSYS_5_HTTP_SESSIONS
表结构
| 字段名 | 字段类型 | 字段描述 |
|---|---|---|
| SESSION_ID | VARCHAR(128) | 会话标识,主键。用于关联事件日志 LOG_SYS.SESSION_ID 和技术日志 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_ID 的含义
SESSION_ID 唯一标识一条会话记录,可用于关联该会话的用户、访问时间和日志。它不能作为登录凭据使用,也不应直接用浏览器中的 Cookie 值查询本字段。
日志中的会话标识
事件日志中的 LOG_SYS.SESSION_ID、技术日志中的 session_id 与本表的 SESSION_ID 对应。排查问题时,可从日志中取得会话标识,在本表查询关联用户、最近访问时间和过期时间,也可使用同一标识检索相关日志。
登录后会话标识可能变化;定位同一次调用中的日志,可使用事件日志的 TRACE_ID 和技术日志的 trace_id。
没有关联会话的日志(例如独立系统任务产生的日志)中,会话标识为空。尚未登录的会话也可能有会话标识,此时用户信息可能为空。会话记录清理后,仍可使用保留在日志中的标识检索历史日志。
表索引
| 类型 | 名称 | 字段列表 | 是否唯一 | 说明 |
|---|---|---|---|---|
| 主键 | PRIMARY | SESSION_ID | 是 | 唯一标识一条 HTTP Session 记录 |
| 索引 | - | - | - | 该表未定义其他索引 |
使用注意
- 无论哪种存储模式,系统都会向本表写入一条记录用于在线用户统计和登录审计。区别在于:默认模式会写入
SESSION_DATA字段保存完整会话数据;Redis 模式只写入用户 ID、时间、IP 等会话信息,不写SESSION_DATA。 SESSION_ID是会话标识,见 SESSION_ID 的含义。CREATE_TIME在会话创建时写入,不再变更。LAST_ACCESS_TIME每次请求结束时更新,可用于判断最近活动时间。EXPIRY_TIME标记会话过期时间。过期会话不会立即删除,查询时通过EXPIRY_TIME > now()过滤,历史数据由后台任务或手动清理。SESSION_DATA由系统维护,不应手工修改或用于业务查询。CLUSTER_NODE记录会话创建时所在节点。集群中的后续请求可能由其他节点处理,因此该字段不代表当前服务节点。IP_ADDRESS存储为整数格式的 IPv4 地址,方便按 IP 范围查询审计日志。
