Gin - Session

2021/9/30 23:13:51

本文主要是介绍Gin - Session,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. gorilla/sessions

  • start:2k+,fork:200+

1.1 安装

go get github.com/gorilla/sessions

1.2 使用

1.2.1 导包

import (
	"github.com/gorilla/sessions"
)

1.2.2 实例化存储引擎

  • cookie - 基于 cookie
// session-key: 只有自己知道的加密密钥
store := sessions.NewCookieStore([]byte("session-key"))
  • file - 基于文件系统
// 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. gin-contrib/sessions

  • start:800+,fork:100+

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 实例化存储引擎

  • cookie
// 基于 gorilla 的 CookieStore
store := cookie.NewStore([]byte("secret"))
  • memstore
store := memstore.NewStore([]byte("secret"))
  • redis
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()


这篇关于Gin - Session的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程