什么是session与token

Session(会话)

核心特点

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

特性SessionToken(如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)黑名单
XSSHttpOnly Cookie避免LocalStorage存储敏感Token
CSRF同步Token模式校验Origin头部

选型决策树

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值