Gin 中的 Session

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

Session 的工作流程

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

Gin 中使用 Session

go get github.com/gin-contrib/sessions

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

• cookie

• memstore

• redis

• memcached

• mongodb

package main

import (
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)




func main() {
	r := gin.Default()

	//配置session的中间件
	// 创建基于 cookie 的存储引擎,secret11111 参数是用于加密的密钥
	store := cookie.NewStore([]byte("secret11111"))
	// 设置 session 中间件,参数 mysession,指的是 session 的名字,也是 cookie 的名字
	// store 是前面创建的存储引擎,我们可以替换成其他存储引擎
	r.Use(sessions.Sessions("mysession", store))



	//initMiddleware:配置路由中间件
	r.GET("/", func(c *gin.Context) {
		//设置sessions
		session :=sessions.Default(c)
		session.Set("username","成强")
		//保存sessions:给其他页面使用(必须调用)
		session.Save()

		c.String(200, "gin首页")
	})
	r.GET("/news", func(c *gin.Context) {
		//获取sessions
		session:=sessions.Default(c)
		username:=session.Get("username")

		c.String(200, "username=%v",username)
	})

}