github.com/gin-contrib/sessions庫使用
通常使用標題的庫來進行session的存儲,session可以被存在數據庫(mysql,Redis等),也可以存在cookie中,以下案例存在cookie當中:
package main
import (
"encoding/gob"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)
type user struct {
Name string
Age int
}
func main() {
//注冊結構體,使其可以跨路由存取
gob.Register(user{})
r := gin.Default()
store := cookie.NewStore([]byte("secret"))
r.Use(sessions.Sessions("mysess", store))
r.GET("/hello", func(c *gin.Context) {
session := sessions.Default(c)
//第一次訪問寫入
if session.Get("hello") != "world" {
session.Set("hello", "world")
//記得寫入
session.Save()
}
session.Set("user", user{"hanyun", 30})
session.Save()
c.JSON(200, gin.H{"hello": session.Get("hello")})
})
r.GET("/user", func(c *gin.Context) {
session := sessions.Default(c)
user := session.Get("user")
c.JSON(200, gin.H{"user": user})
})
r.Run(":8080")
}
注意:
- gob.Register(user{}) 用於注冊結構體,使其可以跨路由存取
- session.Save() 在對session值進行修改時,注意要寫入
- postman可以管理cookie,測試的時候cookie不會隨着服務的停止而消失,始終保留在客戶機上