- Session 结构体新增 IP、UserAgent、Remark 字段,登录/注册时记录设备信息 - Store 接口新增 ListByUID、DeleteByUIDExclude 方法,MemoryStore 完整实现 - SessionManager 新增 ListByUID、DestroyOtherByUID、UpdateRemark 方法 - 新增 UA 轻量解析器(session/ua.go),提取浏览器/OS/设备类型 - 新增 settings_api_sessions.go,提供列表/踢出/一键踢出/备注 4 个 API - 控制器层声明 sessionManager 最小接口(ISP),SettingsController 注入依赖 - Auth 中间件注入 sid 到 gin context,支持识别当前会话 - 设置页左侧导航增加登录管理入口,tab 白名单新增 sessions - 前端实现设备列表展示(浏览器/OS/设备图标/IP/时间)、当前设备标识、备注输入、踢出按钮、一键踢出 - settings.css 新增会话管理全套样式及响应式适配
26 lines
788 B
Go
26 lines
788 B
Go
package session
|
|
|
|
// Store 会话存储接口(内存实现 / Redis 实现均实现此接口)
|
|
type Store interface {
|
|
// Get 按会话 ID 获取会话,不存在或已过期返回 nil
|
|
Get(id string) (*Session, error)
|
|
|
|
// Set 写入/更新会话
|
|
Set(s *Session) error
|
|
|
|
// Delete 删除单个会话
|
|
Delete(id string) error
|
|
|
|
// DeleteByUID 删除某用户的所有会话(改密/注销/强制下线时调用)
|
|
DeleteByUID(uid uint) error
|
|
|
|
// DeleteByUIDExclude 删除某用户的所有会话,但保留指定的会话 ID
|
|
DeleteByUIDExclude(uid uint, excludeSID string) error
|
|
|
|
// ListByUID 列出某用户的所有活跃会话
|
|
ListByUID(uid uint) ([]*Session, error)
|
|
|
|
// Cleanup 清理过期会话,返回清理数量(由后台 goroutine 定期调用)
|
|
Cleanup() int
|
|
}
|