Gin 中的Session

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Gin 中的Session

session概述

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

session的工作流程

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

Gin 中使用 Session

gin框架官方是没有给出session的相关文档,这时候我们又得自己去找第三方的session中间件来使用了。

地址:https://github.com/gin-contrib/sessions gin-contrib/sessions 中间件支持的存储引擎: • cookie • memstore • redis • memcached • mongodb ## 基于 Cookie 存储 Session ### 1、安装 session 包 console go get github.com/gin-contrib/sessions ### 2、基本用法(基于cookie)

```go // 创建基于 cookie 的存储引擎,secret12345 参数是用于加密的密钥,可以随意取,难点比较好 store := cookie.NewStore([]byte("secret12345")) // 设置 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, // 6小时 }) //设置 Session session.Set("username", "aaa") //aaa可更换为用户前端输入的值或者变量 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}) }) ```

3、基本用法(基于redis)

安装 redis 存储引擎的包

go go get github.com/gin-contrib/sessions/redis 关键代码:

go // 初始化基于 redis 的存储引擎 // 参数说明: // 参数 10: - redis 最大的空闲连接数 // 参数 tcp - 数通信协议 tcp 或者 udp // 参数localhost:6379 - redis 地址, 格式,host:port // 参数12345 - redis 密码 // 参数[]byte("secret") - session 加密密钥 store, _ := redis.NewStore(10, "tcp", "localhost:6379", "12345", []byte("secret")) r.Use(sessions.Sessions("mysession", store)) r.GET("/", func(c *gin.Context) { session := sessions.Default(c) session.Set("username", "aaa") 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}) })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值