Next.js 13中为未登录游戏用户生成唯一UserToken追踪进度
追踪未登录用户的Token实现方案
1. 生成唯一会话Token
当用户首次进行猜电影操作时,在后端生成一个**UUID(通用唯一识别码)**作为会话Token。UUID的唯一性足够满足需求,几乎不会出现重复。
- 后端代码示例(Node.js):
const { v4: uuidv4 } = require('uuid'); const userToken = uuidv4(); // 生成类似 "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed" 的Token
2. 绑定Token与游戏数据
将生成的Token作为标识,与用户的游戏记录(剩余尝试次数、线索进度等)绑定后存入数据库。确保每个Token对应唯一的游戏会话,且数据保留时长匹配你的需求(比如数日)。
3. 客户端持久化Token
为了让用户刷新页面、重启浏览器后仍能恢复会话,需要把Token存储在客户端的Cookie或localStorage中:
- 使用Cookie:设置与游戏数据保留时长一致的过期时间,同时开启
HttpOnly和Secure属性提升安全性:
// 后端设置Cookie示例(Node.js/Express) res.cookie('game_session_token', userToken, { maxAge: 7 * 24 * 60 * 60 * 1000, // 保留7天 httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'Strict' });
- 使用localStorage:若不需要后端自动携带Token,可在前端存储,但需注意防范XSS攻击:
// 前端存储Token localStorage.setItem('game_session_token', userToken);
4. 会话恢复逻辑
用户再次访问页面时,前端先检查Cookie或localStorage中是否存在Token:
- 若存在,将Token发送给后端,后端通过Token查询数据库并返回对应的游戏记录;
- 若不存在,判定为新用户,等待首次操作时生成新Token。
5. 关键注意事项
- Token安全性:不要在Token中存储敏感数据,所有游戏数据仅保留在后端;定期清理过期的Token及对应游戏数据,避免数据库冗余。
- 跨标签页同步:若用户打开多个标签页,可利用
localStorage的storage事件同步会话状态,确保各标签页游戏记录一致。 - 设备识别的局限性:纯前端的设备指纹方案易被篡改或随浏览器更新失效,Token+客户端存储的方案更稳定,完全能满足你的需求。
内容的提问来源于stack exchange,提问作者Abdullah moiz
相关产品推荐
相关产品推荐

