美文网首页gin从入门到放弃
gin中session跨路由存取struct

gin中session跨路由存取struct

作者: 寒云暮雨 | 来源:发表于2019-12-24 17:35 被阅读0次

    gin中提供了session包用于处理session
    我们可以把session放在cookie,Redis,Memcached,MongoDB里面,具体可以查看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"`
    }
    
    
    

    在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放进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方法里把需要放进session的模型注册进来

      gob.Register(model.User{})
    

    2、把路由/movie/index中把模型放在session里面
    3、在路由/movie/user里从session里取出模型
    最终解决session跨页面存取模型

    相关文章

      网友评论

        本文标题:gin中session跨路由存取struct

        本文链接:https://www.haomeiwen.com/subject/imufoctx.html