1.1 安装
go get github.com/gorilla/sessions
1.2 使用
1.2.1 导包
import (
"github.com/gorilla/sessions"
)
1.2.2 实例化存储引擎
// session-key: 只有自己知道的加密密钥
store := sessions.NewCookieStore([]byte("session-key"))
// path: session 文件存储位置(文件夹),若 path == "",则会使用 os.TempDir()
store := sessions.NewFilesystemStore(path, []byte("session-key"))
1.2.3 创建 session 对象
func demo(ctx *gin.Context) {
...
// 虽然 session-name 相同,但是不同客户端会得到不同的 session
session, err := store.New(ctx.Request, "session-name")
...
}
1.2.4 获取 session 对象
func demo(ctx *gin.Context) {
...
// 如果不存在,会自动创建一个 session 对象
session, err := store.Get(ctx.Request, "session-name")
...
}
1.2.5 管理 session 对象
- session 中存储的对象以键值对的形式存储在 Values 属性中
- Values 的类型为:map[interface{}]interface{}。
func demo(ctx *gin.Context) {
...
// 读取 Values 属性中存储的值
test := session.Values["test"]
fmt.Println(test)
...
// 修改 Values
session.Values["test"] = "test" // 有则修改,无则存入
session.Save(ctx.Request, ctx.Writer) // 必须调用 Save() 方法,对 Values 的修改才会生效
...
// 删除 session 对象,MaxAge < 0 即为删除
session.Options.MaxAge = -1
session.Save(ctx.Request, ctx.Writer)
...
}
2.1 安装
go get github.com/gorilla/sessions
2.2 使用
2.2.1 导包
import (
// 导入 session 包
"github.com/gin-contrib/sessions"
// 导入 session 存储引擎
"github.com/gin-contrib/sessions/cookie" // cookie memstore redis memcached mongodb
)
2.2.2 实例化存储引擎
// 基于 gorilla 的 CookieStore
store := cookie.NewStore([]byte("secret"))
store := memstore.NewStore([]byte("secret"))
store := redis.NewStore(
10, // size: 最大空闲连接数
"tcp", // network: tcp | udp
"localhost:6379", // address: host:port
"", // password: redis-password
[]byte("secret"), // keyPairs: 只有自己知道的加密密钥
)
2.2.3 设置 session 中间件
g := gin.Default()
// 虽然 session-name 相同,但是不同客户端会得到不同的 session
g.Use(sessions.Sessions("session-name", store))
2.2.4 获取 session 对象
session := sessions.Default(ctx) // ctx *gin.Context
2.2.5 管理 session 对象
// 读取 session 中存储的值
session.Get("test")
// 修改/新增 session 中存储的值
session.Set("test", "gin-contrib test")
session.Save() // 对 session 中的值进行【增/删/改】都需要调用 Save() 方法保存更改
// 删除 session 中存储的值
session.Delete("test")
session.Save()
// 删除整个 session 对象
session.Clear()