求教,用"github.com/gin-contrib/sessions" 插件,只是一个简直的在session里存个键值对,但是在另一个方法里读这个键,却得不到值

oscarzhou · 2017-11-01 21:26:13 · 4449 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-11-01 21:26:13 的主题,其中的信息可能已经有所发展或是发生改变。

var store = sessions.NewCookieStore([]byte("secret"))
...
...
router.Use(sessions.Sessions("gosession", store))
{
    router.GET("login", (&controllers.OauthController{}).LoginByAuth)
    router.GET("auth", (&controllers.OauthController{}).AuthorizationCodeMethod)
}

上面是初始化session的代码, 我作用于两个方法,在LoginByAuth 中是

state := randToken()

session := sessions.Default(c)
session.Set("state", state)
session.Save()

就做了个存state 的操作。然后在AuthorizationCodeMethod

session := sessions.Default(c)
retrievedState := session.Get("state")

但是显示为空。我把两个函数中的session都有打印出来。session的结构是这样的,

            type session struct {
                name    string
                request *http.Request
                store   Store
                session *sessions.Session
                written bool
                writer  http.ResponseWriter
            }

结果发现

微信截图_20171102102304.png

session.Set("state", state)的操作就是把state存入到sessions.Session里面有一个Values的map[string]interface{},但是如图显示,两次得到的sessions.Session是不一样的。我真不知道怎么办了,我就是用sessions.Default(c)基本方法去做这个实现的。请问有没有大神知道是怎么回事呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4449 次点击  
加入收藏 微博
2 回复  |  直到 2019-04-18 22:19:27
Francislyk
Francislyk · #1 · 6年之前

同出现类似问题,大佬解决了吗?

igufei
igufei · #2 · 6年之前

在main方法里先执行下面代码

gob.Register(schema.User{})

schema.User{}这段可以替换成你要存在session里的struct原型 顺便说一下需要保存的struct的数据不要太大,如果store使用的是数据库的话,session.save 会报错

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传