C++聊天室项目:注册登录接口与 Redis 缓存

张开发
2026/4/6 4:15:30 15 分钟阅读

分享文章

C++聊天室项目:注册登录接口与 Redis 缓存
本文讲解 C 聊天室项目第二部分 ——注册登录接口设计、密码加密、Redis 缓存 Cookie的实现与原理覆盖 RESTful API、MySQL 用户表、盐值加密、Redis 会话存储等核心知识点。一、RESTful API 基础原理RESTful API 是基于 HTTP 协议的接口设计风格通过GET、POST、PUT、DELETE实现数据的查、增、改、删具有无状态、资源导向、可缓存等特点是前后端分离项目的主流接口方案。1. 设计规范资源用名词表示如/v1/userHTTP 方法表示操作GET 查询、POST 新增、PUT 更新、DELETE 删除支持筛选、排序、分页参数示例GET /v1/user?sexmaleage30该语句表示查询性别为男、年龄大于 30 的用户数据?后为查询参数连接多条件。2. 状态码规范200请求成功204操作成功无返回体400请求参数错误401未授权404资源不存在500服务器异常二、MySQL 用户表设计用户信息采用独立表存储包含用户名、邮箱、加密密码、盐值等字段保证数据安全与查询效率。DROP TABLE users; CREATE TABLE IF NOT EXISTS users ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL, password_hash CHAR(64) NOT NULL, salt CHAR(32) NOT NULL, create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE (username), UNIQUE (email), INDEX idx_email (email) );password_hashMD5 加盐后的密码salt随机盐值提升密码安全性唯一约束避免重复用户名、邮箱注册三、密码加密与盐值Salt1. 为什么用盐值直接 MD5 加密相同密码会得到相同结果易被彩虹表破解。盐值是每个用户独有的随机字符串加密时拼接在密码后让相同密码生成不同密文。2. 加密流程用户注册明文密码 → MD5 → 拼接盐值 → 再次 MD5存储将password_hash与salt一同存入数据库登录使用相同盐值与加密规则验证密码一致性示例md5(md5(123456) 随机盐值)3. 注册 / 登录接口注册接口POST/api/create-account参数username、email、MD5 密码登录接口POST/api/login参数email/username、MD5 密码成功返回 204 并在 Header 设置 Cookie失败返回 400 与错误信息四、Redis 缓存 Cookie 实现会话管理1. Redis 作用Redis 是基于内存的高性能键值数据库读写速度极快适合存储会话、缓存等短时数据。本项目用 Redis 缓存 Cookie实现登录状态快速校验。2. 核心流程登录成功生成唯一 CookiesidRedis 存储keysidvalue 用户信息 / 邮箱设置过期时间保证会话安全前端请求自动携带 Cookie后端通过 Redis 校验登录状态3. 常用 Redis 命令# 后台启动Redis redis-server --daemonize yes # 连接Redis客户端 redis-cli # 设置Cookie缓存 set sid:xxxx user:zhou # 获取Cookie对应用户 get sid:xxxx # 查看所有键 keys *五、项目启动与常见问题1. 启动顺序启动 MySQLsudo systemctl start mysql启动 Redisredis-server --daemonize yes启动后端./bin/chat-room2 chat-room.conf启动前端npm run dev访问http://127.0.0.1:51732. 常见报错Redis 连接失败未启动 Redis 服务先执行redis-server内存崩溃malloc 错误WebSocket 连接异常重启后端即可磁盘空间不足清理 npm 缓存与系统日志六、核心知识点总结RESTful API统一接口规范支持筛选、分页、排序盐值加密提升密码安全性防止彩虹表破解MySQL 用户表结构化存储用户信息保证唯一性Redis 缓存快速存储 Cookie实现高效会话管理前后端交互JSON 序列化传递数据Cookie 保持登录状态https://github.com/0voice

更多文章