gin-contrib和gorilla库都是实现sessions的第三方库,但是库内的方法略有不同。今天我就遇到了如下的问题:
1. 首先看一下别人写的源码,重点看一下红色框里的方法
2. 我自己跟着敲了一下
首先引用的是github.con/gorilla/sessions
func setSession(engine *gin.Engine){
store := sessions.NewCookieStore([]byte(_config.Server.SessionSecret))
store.Options(sessions.Options{HttpOnly: true, MaxAge: 7*86400, Path: "/"}) //Also set Secure: true if using SSL, you should though
engine.Use(sessions.Sessions("gin-session", store))
}
可以看到这两个地方都报错了,说明这个package中有NewCookieStore方法,但并没有后面的两个方法
换成github.com/gin-contrib/sessions
有最后的Sessions方法但是却没有了NewCookieStore方法
这两个包形成交叉,曾尝试将两个包同时引用,并改名加以区分,但是失败了
解决方法
后来去github上看来源码,发现gin-contrib中有一个cookie.go,里面有一个NewStore(),发现参数和返回值与NewCookieStore是相同的,大胆猜测它们等价。
func NewStore(keyPairs ...[]byte) Store {
return &store{gsessions.NewCookieStore(keyPairs...)}
}