https://www.tizi365.com/archives/288.html

在Gin框架中,我们可以依赖gin-contrib/sessions中间件处理session。
gin-contrib/sessions中间件支持的存储引擎:

  1. cookie
  2. memstore
  3. redis
  4. memcached
  5. mongodb

安装session包

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

基本的session用法

  1. package main
  2. import (
  3. // 导入session包
  4. "github.com/gin-contrib/sessions"
  5. // 导入session存储引擎
  6. "github.com/gin-contrib/sessions/cookie"
  7. // 导入gin框架包
  8. "github.com/gin-gonic/gin"
  9. )
  10. func main() {
  11. r := gin.Default()
  12. // 创建基于cookie的存储引擎,secret11111 参数是用于加密的密钥
  13. store := cookie.NewStore([]byte("secret11111"))
  14. // 设置session中间件,参数mysession,指的是session的名字,也是cookie的名字
  15. // store是前面创建的存储引擎,我们可以替换成其他存储引擎
  16. r.Use(sessions.Sessions("mysession", store))
  17. r.GET("/hello", func(c *gin.Context) {
  18. // 初始化session对象
  19. session := sessions.Default(c)
  20. // 通过session.Get读取session值
  21. // session是键值对格式数据,因此需要通过key查询数据
  22. if session.Get("hello") != "world" {
  23. // 设置session数据
  24. session.Set("hello", "world")
  25. // 删除session数据
  26. session.Delete("tizi365")
  27. // 保存session数据
  28. session.Save()
  29. // 删除整个session
  30. // session.Clear()
  31. }
  32. c.JSON(200, gin.H{"hello": session.Get("hello")})
  33. })
  34. r.Run(":8000")
  35. }

基于redis存储引擎的session

如果我们想将session数据保存到redis中,只要将session的存储引擎改成redis即可。
使用redis作为存储引擎的例子:
首先安装redis存储引擎的包

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

例子:

  1. package main
  2. import (
  3. "github.com/gin-contrib/sessions"
  4. "github.com/gin-contrib/sessions/redis"
  5. "github.com/gin-gonic/gin"
  6. )
  7. func main() {
  8. r := gin.Default()
  9. // 初始化基于redis的存储引擎
  10. // 参数说明:
  11. // 第1个参数 - redis最大的空闲连接数
  12. // 第2个参数 - 数通信协议tcp或者udp
  13. // 第3个参数 - redis地址, 格式,host:port
  14. // 第4个参数 - redis密码
  15. // 第5个参数 - session加密密钥
  16. store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
  17. r.Use(sessions.Sessions("mysession", store))
  18. r.GET("/incr", func(c *gin.Context) {
  19. session := sessions.Default(c)
  20. var count int
  21. v := session.Get("count")
  22. if v == nil {
  23. count = 0
  24. } else {
  25. count = v.(int)
  26. count++
  27. }
  28. session.Set("count", count)
  29. session.Save()
  30. c.JSON(200, gin.H{"count": count})
  31. })
  32. r.Run(":8000")
  33. }