Go 语言 Gin 框架会话控制(Session/Cookie)最全实战教程
️ 标签GoGin会话控制CookieSession登录认证Web开发 适用人群Go 初学者、Gin 开发者、课程实训、面试必背、CSDN 发布 文章亮点通俗、完整、可直接运行包含 Cookie 使用、Session 安装与使用、登录拦截、会话销毁、生命周期设置覆盖企业开发所有场景。一、前言HTTP 协议是无状态协议—— 服务器记不住你是谁每次请求都是全新的。 为了实现登录状态保持、用户身份识别、购物车、会话数据必须使用会话控制技术。在 Go Gin 开发中会话控制主要有两种方案Cookie客户端存储少量数据、不安全Session服务端存储安全、常用、适合登录状态本文带你从零学会Cookie 全套用法Gin 集成 Session登录验证 会话保持销毁会话、安全配置二、什么是会话控制一句话解释让服务器记住当前用户是谁保持登录状态直到退出登录。常见场景登录后刷新页面依然保持登录不同页面共享用户信息后台管理系统权限判断购物车数据保存三、Cookie 使用详解3.1 什么是 Cookie保存在浏览器的一小段数据由服务器设置浏览器自动携带键值对结构、有过期时间不适合存敏感信息不安全3.2 Gin 设置 Cookie// 设置 Cookie r.GET(/setCookie, func(c *gin.Context) { // 参数name, value, 有效时间(s), 路径, 域名, 安全, 是否仅http c.SetCookie(username, zhangsan, 60*60*24, /, , false, true) c.String(200, Cookie 设置成功) })3.3 获取 Cookier.GET(/getCookie, func(c *gin.Context) { username, err : c.Cookie(username) if err ! nil { c.String(200, 未找到 Cookie) return } c.String(200, 获取到Cookieusername) })3.4 删除 Cookie将时间设为 -1 即可删除r.GET(/delCookie, func(c *gin.Context) { c.SetCookie(username, , -1, /, , false, true) c.String(200, Cookie 已删除) })3.5 Cookie 缺点数据不安全可查看、篡改存储空间小4KB每次请求自动携带浪费流量企业开发登录状态优先用 Session四、Session 会话控制重点4.1 什么是 Session保存在服务器的会话数据安全、容量大基于 Cookie 实现存储一个 sessionId适合保存用户登录信息、权限、token4.2 Gin 安装 Session 依赖go get github.com/gin-contrib/sessions go get github.com/gin-contrib/sessions/cookie4.3 初始化 Session必须写在最前面package main import ( github.com/gin-contrib/sessions github.com/gin-contrib/sessions/cookie github.com/gin-gonic/gin ) func main() { r : gin.Default() // 1. 创建 Session 存储引擎 store : cookie.NewStore([]byte(secret_123456)) // 密钥自定义 // 2. 注册 Session 中间件 r.Use(sessions.Sessions(mySession, store)) // 路由写在这里... r.Run(:8080) }五、Session 实战登录、判断、销毁5.1 登录设置 Sessionr.GET(/login, func(c *gin.Context) { // 获取 Session s : sessions.Default(c) // 设置会话数据登录成功 s.Set(userId, 1001) s.Set(username, 张三) // 保存 Session s.Save() c.String(200, 登录成功Session已设置) })5.2 获取 Session 判断登录r.GET(/user/info, func(c *gin.Context) { s : sessions.Default(c) username : s.Get(username) if username nil { c.String(200, 未登录请先登录) return } c.String(200, 当前登录用户username.(string)) })5.3 退出登录销毁 Sessionr.GET(/logout, func(c *gin.Context) { s : sessions.Default(c) s.Clear() // 清空数据 s.Save() // 保存 c.String(200, 退出登录成功Session已销毁) })六、登录拦截中间件企业实战结合中间件 Session 实现登录拦截// 登录验证中间件 func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { s : sessions.Default(c) username : s.Get(username) if username nil { c.JSON(200, gin.H{ code: 401, msg: 未登录请先登录, }) c.Abort() // 终止请求 return } c.Next() // 放行 } }使用// 需要登录才能访问 r.GET(/order/list, AuthMiddleware(), func(c *gin.Context) { c.String(200, 订单数据已登录) })七、Cookie 与 Session 对比表格方式存储位置安全性容量适用场景Cookie浏览器低小 (4KB)记住账号、主题Session服务器高大登录状态、权限企业开发登录认证 → Session非敏感小数据 → Cookie八、Session 生命周期设置store.Options(sessions.Options{ MaxAge: 86400, // 1天 Path: /, HttpOnly: true, })九、总结必背HTTP 无状态 → 需要会话控制Cookie客户端存储不安全、量小Session服务端存储安全、适合登录Gin 使用github.com/gin-contrib/sessions核心方法s.Set()设置s.Get()获取s.Clear()销毁s.Save()保存结合中间件实现登录拦截版权声明本文为原创 Go 语言 Gin 框架会话控制实战教程内容完整、通俗易懂、代码可直接运行适合 CSDN 发布、课程实训、作业报告、面试复习禁止未经授权转载抄袭。