gin中session跨路由存取struct

gin中提供了session包用于處理session
我們可以把session放在cookie,Redis,Memcached,MongoDB里面,具體可以查看github上的示例。
有時(shí)候我們?yōu)榱藵M足我們的業(yè)務(wù)需求,需要把一個(gè)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() {
      //首先要注冊(cè)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"`
}


在controller層存取域名

/*
@Author :   寒云
@Email  :   1355081829@qq.com
@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放進(jìn)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、我們?cè)趍ain方法里把需要放進(jìn)session的模型注冊(cè)進(jìn)來(lái)

  gob.Register(model.User{})

2、把路由/movie/index中把模型放在session里面
3、在路由/movie/user里從session里取出模型
最終解決session跨頁(yè)面存取模型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容