ginにおけるsessionクロスルーティングアクセスstruct

2066 ワード

ginにはsessionパッケージが提供されています.sessionを処理するために、cookie、Redis、Memcached、MongoDBにsessionを入れることができます.githubの例を具体的に見ることができます.ビジネスのニーズを満たすためにstructを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クロスページアクセスモデルを解決する