ginにおけるsessionクロスルーティングアクセスstruct
2066 ワード
ginにはsessionパッケージが提供されています.sessionを処理するために、cookie、Redis、Memcached、MongoDBにsessionを入れることができます.githubの例を具体的に見ることができます.ビジネスのニーズを満たすためにstructをsessionに保存する必要がある場合はどうすればいいですか?
userモデルの定義
コントロールレイヤでドメイン名にアクセス
1、mainメソッドにセッションに入れるモデルを登録します
2、ルーティング/movie/indexでモデルをsessionの中に置く3、ルーティング/movie/userでsessionからモデルを取り出して最終的にsessionクロスページアクセスモデルを解決する
package main
import (
"encoding/gob"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/redis"
"github.com/gin-gonic/gin"
"movie/app/http/controller/api"
"movie/app/http/middleware"
"movie/app/model"
"time"
)
func main() {
// User
gob.Register(model.User{})
router := gin.Default()
store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
store.Options(sessions.Options{
MaxAge: int(30 * time.Minute), //30min
Path: "/",
})
router.Use(sessions.Sessions("movie", store))
router.GET("/movie/index", api.Index)
router.GET("/movie/user", api.User)
_ = router.Run(":8081")
}
userモデルの定義
package model
type User struct {
Name string `json:"name"`
Password string `json:"password"`
Mobile string `json:"mobile"`
}
コントロールレイヤでドメイン名にアクセス
/*
@Author :
@Email : [email protected]
@Time : 2019/12/18 14:13
*/
package api
import (
"fmt"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"movie/app/model"
)
func Index(c *gin.Context) {
session := sessions.Default(c)
// User session
session.Set("session_01", model.User{Name: "hanyun"})
_ = session.Save()
}
func User(c *gin.Context) {
session := sessions.Default(c)
value := session.Get("session_01")
fmt.Println(value)
}
1、mainメソッドにセッションに入れるモデルを登録します
gob.Register(model.User{})
2、ルーティング/movie/indexでモデルをsessionの中に置く3、ルーティング/movie/userでsessionからモデルを取り出して最終的にsessionクロスページアクセスモデルを解決する