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](https://static.studygolang.com/171102/6de05c6c2433b370959c62a5fe2b99ca.png)
而`session.Set("state", state)`的操作就是把state存入到sessions.Session里面有一个Values的`map[string]interface{}`,但是如图显示,两次得到的sessions.Session是不一样的。我真不知道怎么办了,我就是用`sessions.Default(c)`基本方法去做这个实现的。请问有没有大神知道是怎么回事呢?
求教,用"github.com/gin-contrib/sessions" 插件,只是一个简直的在session里存个键值对,但是在另一个方法里读这个键,却得不到值
oscarzhou · · 4266 次点击更多评论
在main方法里先执行下面代码
~~~ go
gob.Register(schema.User{})
~~~
schema.User{}这段可以替换成你要存在session里的struct原型
顺便说一下需要保存的struct的数据不要太大,如果store使用的是数据库的话,session.save 会报错
#2