Session(会话)
核心特点
- 服务器端会话:Session是服务器为每个用户创建的临时身份凭证,用于跟踪用户在服务器端的活动状态,例如玩家登录后,服务器生成唯一Session ID(如a1b2c3d4),并在服务端存储对应的玩家数据(如用户ID、登录时间、角色属性等)
- 生命周期:从用户登录开始,到用户退出或超时结束(例如30分钟无操作自动失效)
- 存储位置:Session数据存储在服务器内存或数据库(如Redis)
- 传输方式:Session ID通过Cookie或URL参数传递,客户端每次请求需携带Session ID,服务器通过它查找内存/Redis中的会话数据
工作原理

游戏开发中的应用场景
- 玩家登录状态保持:玩家登录后,服务器生成Session记录玩家等级、装备等临时数据
- 实时对战同步:通过Session跟踪玩家在房间中的实时状态
- 防作弊:通过Session验证请求是否来自合法客户端
优缺点
- 优点:
- 安全性较高(敏感数据存储在服务器)
- 可随时强制终止会话(如踢出作弊玩家)
- 缺点:
- 服务器需要维护会话状态(内存压力大)
- 分布式系统需共享Session(如Redis集群)
Token(令牌)
核心特点
- 客户端令牌:Token是服务器签发给客户端的加密字符串,客户端自行保管并随请求发送
- 无状态验证:服务端只需验证签名和过期时间,无需存储会话数据
- 常见类型:JWT(JSON Web Token)、OAuth2 Token
JWT 结构示例
Header(算法类型)
{
"alg": "HS256",
"typ": "JWT"
}
Payload(用户数据)
{
"user_id": 123,
"exp": 1625097600 // 过期时间
}
Signature(签名)
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
工作原理

游戏开发中的应用场景
- 移动端无状态认证:手游客户端通过Token保持登录状态
- 第三方登录:使用OAuth2 Token集成Google/Apple账号登录
- 微服务通信:服务间通过Token验证请求合法性
优缺点
- 优点:
- 无状态(服务器不存储会话数据)
- 适合分布式架构和跨域场景
- 缺点:
- Token一旦泄露无法立即失效(需依赖短有效期)
- 数据明文可见(需加密敏感字段)
进阶用法
- Refresh Token:长期有效的更新令牌,搭配短期Access Token使用

Session vs Token 对比
特性 | Session | Token(如JWT) |
---|
存储位置 | 服务器端 | 客户端(LocalStorage/Cookie) |
状态管理 | 有状态 | 无状态 |
扩展性 | 需共享存储(如Redis) | 天然支持分布式 |
安全性 | 依赖HTTPS和Session ID保密 | 依赖签名和加密算法 |
典型使用场景 | 传统Web游戏、需要强控制的场景 | 手游/跨平台游戏、微服务架构 |
游戏开发中的最佳实践
混合模式
- 短期Session + 长期Token:
- 用Token实现自动登录(7天有效)
- 用Session管理实时游戏状态(如战斗房间)

安全增强
- Session:
- 绑定IP和设备指纹
- 使用HttpOnly和Secure Cookie
- Token:
- 设置短有效期(如15分钟) + Refresh Token机制
- 使用非对称加密(RS256算法)
性能优化
- Session:使用内存数据库(如Redis)加速查询
- Token:在Payload中避免存储过多数据(JWT默认不加密)
常见攻击与防御
攻击类型 | Session防御 | Token防御 |
---|
劫持 | 定期轮换Session ID | 使用短有效期 + HTTPS |
重放攻击 | 绑定时间戳 + 一次性令牌 | 添加jti(JWT ID)黑名单 |
XSS | HttpOnly Cookie | 避免LocalStorage存储敏感Token |
CSRF | 同步Token模式 | 校验Origin头部 |
选型决策树
