Gin框架入门系列-如何处理session

2023-11-07 10:37:19 浏览数 (3)

在Gin框架中,我们可以依赖gin-contrib/sessions[1]中间件处理session。

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

  • • cookie
  • • memstore
  • • redis
  • • memcached
  • • mongodb

下面介绍session的用法

1.安装session包

代码语言:javascript复制
go get github.com/gin-contrib/sessions

2.基本的session用法

代码语言:javascript复制
package main

import (
        // 导入session包
    "github.com/gin-contrib/sessions"
       // 导入session存储引擎
    "github.com/gin-contrib/sessions/cookie"
        // 导入gin框架包
    "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("/hello", func(c *gin.Context) {
                // 初始化session对象
        session := sessions.Default(c)
                
                // 通过session.Get读取session值
                // session是键值对格式数据,因此需要通过key查询数据
        if session.Get("hello") != "world" {
                        // 设置session数据
            session.Set("hello", "world")
                        // 删除session数据
                        session.Delete("xj")
                        // 保存session数据
            session.Save()
                        // 删除整个session
                        // session.Clear()
        }
                
        c.JSON(200, gin.H{"hello": session.Get("hello")})
    })
    r.Run(":8000")
}

2.基于redis存储引擎的session

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

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

首先安装redis存储引擎的包

代码语言:javascript复制
go get github.com/gin-contrib/sessions/redis

例子:

代码语言:javascript复制
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")
}

Gin框架入门系列

gin框架入门系列-快速入门

Gin框架入门系列-路由与控制器及静态网站

Gin框架入门系列-处理参数

Gin框架入门系列-处理请求结果

Gin框架入门系列-如何处理cookie

我有个大胆的想法

小伙伴在平常有没有遇到以下这种情况:遇到技术难题时,网上教程一堆堆,优秀的很多,但也有很多是过时的,或者是copy来copy去,甚至错别字都没改。

我公众号的技术文章,都是亲自校验过的。至少可以保证在发文的一段时间,不会过时。如果你在实操过程中,有遇到问题,可以在同名公众号留言,免费解答,相互学习,相互成长^v^

往期精彩

收藏那么多python资料干嘛,这一本就够你从入门到入土了!

SaaS 多租户系统数据隔离方案

爬虫能有多难啊?看完这篇,你还不上手?

如何每天自动发送微信消息给女朋友说晚安

八千字直接带你学完《基于Python的Selenium4从入门到高级》全教程

Python高效文件传输:实现远程下载与上传的终极方法(paramiko)

0 人点赞