ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gin - Session

2021-09-30 22:31:07  阅读:187  来源: 互联网

标签:... Session sessions ctx session gin test Gin


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有