其他分享
首页 > 其他分享> > Gin - Session

Gin - Session

作者:互联网

1. gorilla/sessions

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 对象

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. gin-contrib/sessions

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()

标签:...,Session,sessions,ctx,session,gin,test,Gin
来源: https://www.cnblogs.com/Icarus0727/p/15358289.html