ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> 在Gin框架中,我们可以依赖gin-contrib/sessions中间件处理session,该中间件支持cookie、memstore、redis、memcached、mongodb等存储引擎 [TOC] ## 安装session包 ~~~ go get github.com/gin-contrib/sessions ~~~ ## 基于cookie存储的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的存储引擎,my_secret_Yx16-12SaA 参数是用于加密的密钥 store := cookie.NewStore([]byte("my_secret_Yx16-12SaA")) // 设置session中间件,参数mysession,指的是session的名字,也是cookie的名字 // store是前面创建的存储引擎,我们可以替换成其他存储引擎 r.Use(sessions.Sessions("mysession", store)) r.GET("/hello", func(c *gin.Context) { // 初始化session对象 session := sessions.Default(c) // 通过session.Get读取session值 if session.Get("hello") != "world" { // 设置session session.Set("hello", "world") // 删除session session.Delete("newkey") // 保存session session.Save() // 删除整个session // session.Clear() } c.JSON(200, gin.H{"hello": session.Get("hello")}) }) r.Run(":8080") } ~~~ ## 基于redis存储的session **安装redis存储引擎包** ~~~ go get github.com/gin-contrib/sessions/redis ~~~ **例子:** ~~~ package main import ( "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // 初始化基于redis的存储引擎 // 参数说明: // 第1个参数 - redis最大的空闲连接数 // 第2个参数 - 数通信协议tcp或者udp // 第3个参数 - redis地址, 格式,host:port // 第4个参数 - redis密码 // 第5个参数 - session加密密钥 store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret")) r.Use(sessions.Sessions("mysession", store)) r.GET("/incr", func(c *gin.Context) { session := sessions.Default(c) var count int v := session.Get("count") if v == nil { count = 0 } else { count = v.(int) count++ } session.Set("count", count) session.Save() c.JSON(200, gin.H{"count": count}) }) r.Run(":8000") } ~~~