Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • Gateway
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • Gateway
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Gin 介绍
  • Gin 环境搭建
  • golang 程序的热加载
  • Gin 框架中的路由
  • Gin HTML 模板渲染
  • 静态文件服务
  • 路由详解
  • Gin 中自定义控制器
  • Gin 中间件
  • Gin 中自定义 Model
  • Gin 文件上传
  • Gin 中的 Cookie
  • Gin 中的 Session
    • 1、Session 简单介绍
    • 2、Session 的工作流程
    • 3、Gin 中使用 Session
    • 4、基于 Cookie 存储 Session
    • 5、基于 Redis 存储 Session
  • Gin 中使用 GORM 操作 mysql 数据库
  • 原生 SQL 和 SQL 生成器
  • Gin 中使用 GORM 实现表关联查询
  • GORM 中使用事务
  • Gin 中使用 go-ini 加载.ini 配置文件
  • 《Gin》笔记
Salmon
2025-04-05
目录

Gin 中的 Session

# 1、Session 简单介绍

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。

# 2、Session 的工作流程

当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个 session 对象,生成一个类似于key - value 的键值对,然后将 value 保存到服务器,将 key(cookie)返回到浏览器(客户)端。浏览器下次访问时会携带 key(cookie),找到对应的 session(value)。

# 3、Gin 中使用 Session

Gin 官方没有给我们提供 Session 相关的文档,这个时候我们可以使用第三方的 Session 中间件来实现

https://github.com/gin-contrib/sessions (opens new window)

gin-contrib/sessions 中间件支持的存储引擎:

  • cookie
  • memstore
  • redis
  • memcached
  • mongodb

# 4、基于 Cookie 存储 Session

1、安装 session 包

go get github.com/gin-contrib/sessions

2、基本的 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()
    // 创建基于 cookie 的存储引擎,secret11111 参数是用于加密的密钥
    store := cookie.NewStore([]byte("secret11111"))
    // 设置 session 中间件,参数 mysession,指的是 session 的名字,也是 cookie 的名字
    // store 是前面创建的存储引擎,我们可以替换成其他存储引擎
    r.Use(sessions.Sessions("mysession", store))
    r.GET("/", func(c *gin.Context) {
       //初始化 session 对象
       session := sessions.Default(c)
       //设置过期时间
       session.Options(sessions.Options{
          MaxAge: 3600 * 6, // 6hrs
       })
       //设置 Session
       session.Set("username", "张三")
       session.Save()
       c.JSON(200, gin.H{"msg": session.Get("username")})
    })
    r.GET("/user", func(c *gin.Context) {
       // 初始化 session 对象
       session := sessions.Default(c)
       // 通过 session.Get 读取 session 值
       username := session.Get("username")
       c.JSON(200, gin.H{"username": username})
    })
    r.Run(":9090")
}

# 5、基于 Redis 存储 Session

如果我们想将 session 数据保存到 redis 中,只要将 session 的存储引擎改成 redis 即可。

使用 redis 作为存储引擎的例子:

首先安装 redis 存储引擎的包

go get github.com/gin-contrib/sessions/redis

例子:

package main

import (
    "fmt"
    "github.com/gin-contrib/sessions"
    "github.com/gin-contrib/sessions/redis"
    "github.com/gin-gonic/gin"
    "log"
)

func main() {
    r := gin.Default()
    // 初始化基于 redis 的存储引擎
    // 参数说明:
    // 第 1 个参数 - redis 最大的空闲连接数
    // 第 2 个参数 - 数通信协议 tcp 或者 udp
    // 第 3 个参数 - redis 地址, 格式,host:port
    // 第 4 个参数 - redis 用户名
    // 第 5 个参数 - redis 密码
    // 第 6 个参数 - session 加密密钥
    store, err := redis.NewStore(10, "tcp", "127.0.0.1:6379", "", "", []byte("secret3333"))
    if err != nil {
       log.Fatalf("Failed to create Redis store: %v", err)
    }
    r.Use(sessions.Sessions("mysession333", store))

    r.GET("/", func(c *gin.Context) {
       session := sessions.Default(c)
       fmt.Println("session:", session)
       fmt.Println("session.Session():", session.ID()) // 可能是 nil!
       session.Set("username", "李四")
       session.Save()
       c.JSON(200, gin.H{"username": session.Get("username")})
    })

    r.GET("/user", func(c *gin.Context) {
       // 初始化 session 对象
       session := sessions.Default(c)
       // 通过 session.Get 读取 session 值
       username := session.Get("username")
       c.JSON(200, gin.H{"username": username})
    })
    r.Run(":9090")
}
上次更新: 2025/04/07, 23:46:20
Gin 中的 Cookie
Gin 中使用 GORM 操作 mysql 数据库

← Gin 中的 Cookie Gin 中使用 GORM 操作 mysql 数据库→

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式