Skip to main content

[gin] gin-contrib/sessions 筆記

gin-contribute/sessions

安裝:

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

範例程式碼#

cookie-based#

// https://pkg.go.dev/github.com/gin-contrib/sessions?tab=overview#cookie-based
// cookie-based
func main() {
r := gin.Default()
// 建立 store
store := cookie.NewStore([]byte("secret"))
// session 的名稱會在 browser 變成 cookie 的 key
r.Use(sessions.Sessions("mysession", store))
r.GET("/incr", func(c *gin.Context) {
// 從 ctx 中取出 session
session := sessions.Default(c)
var count int
// 取得 session 中的值
v := session.Get("count")
if v == nil {
count = 0
} else {
count = v.(int)
count++
}
// 設定 session 中的值(不會儲存)
session.Set("count", count)
// 儲存 session 中的值
session.Save()
c.JSON(200, gin.H{"count": count})
})
r.Run(":8000")
}

Multiple Sessions#

// https://pkg.go.dev/github.com/gin-contrib/sessions?tab=overview#multiple-sessions
func main() {
r := gin.Default()
// 建立 store
store := cookie.NewStore([]byte("secret"))
// 建立多個 sessions name,browser 會有多個 cookie
// session name 會對應到 cookie 中的 key
sessionNames := []string{"foo", "bar"}
r.Use(sessions.SessionsMany(sessionNames, store))
r.GET("/hello", func(c *gin.Context) {
// 從 ctx 中取出 sessions,並分別取得 sessionFoo 和 sessionBar
sessionFoo := sessions.DefaultMany(c, "foo")
sessionBar := sessions.DefaultMany(c, "bar")
// 取得 sessionFoo 中的值
if sessionFoo.Get("hello") != "world!" {
// 設定 sessionFoo 中的值(不會儲存)
sessionFoo.Set("hello", "world!")
// 儲存 sessionFoo 中的值(不會儲存)
sessionFoo.Save()
}
if sessionBar.Get("hello") != "world?" {
sessionBar.Set("hello", "world?")
sessionBar.Save()
}
c.JSON(200, gin.H{
"foo": sessionFoo.Get("hello"),
"bar": sessionBar.Get("hello"),
})
})
r.Run(":8000")
}
Last updated on