Skip to content

Go语言的Cookie Session包,支持Redis等多种存储引擎,可通用Go语言的net/http以及兼容该标准包的大部份Web框架

Notifications You must be signed in to change notification settings

dxvgef/sessions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sessions

Go语言的Sessions库。使用Storage接口来实现数据存储层的抽象化,可通过实现该接口来将数据存储到Memcached、Redis、LevelDB、RocksDB、MySQL等数据库。还支持值类型转换的链式方法,有助于减少代码量。

已内置的数据存储器:

  • Redis(支持 > v6)

Tsing框架结合使用的示例

package main

import (
	"log"
	"net/http"
	"time"

	"github.com/dxvgef/sessions"
	"github.com/dxvgef/sessions/storage/redis"
	"github.com/dxvgef/tsing"
)

// 定义session引擎
var engine *sessions.Engine

func main() {
	log.SetFlags(log.Ltime | log.Lshortfile)

	// 创建session引擎
	if err := newSessEngine(); err != nil {
		log.Fatalln(err.Error())
	}

	app := tsing.New(&tsing.Config{})
	
	// 定义一个路由处理器用于写入session
	app.Router.GET("/", func(ctx *tsing.Context) error {
		// 启用session
		session, err := engine.Use(ctx.Request, ctx.ResponseWriter)
		if err != nil {
			log.Println(err.Error())
			return err
		}
		// 写入值
		err = session.Put("test", "ok")
		return err
	})

	// 定义一个路由处理器用于演示sessions的其它操作
	app.Router.GET("/test", func(ctx *tsing.Context) error {
		// 启用session
		session, err := engine.Use(ctx.Request, ctx.ResponseWriter)
		if err != nil {
			log.Println(err.Error())
			return err
		}
		// 读取string类型的值
		var result sessions.Result
		result = session.Get("test")
		if result.Err() != nil {
			log.Println(result.Err())
			return result.Err()
		}
		ctx.ResponseWriter.WriteHeader(200)
		ctx.ResponseWriter.Write(result.Bytes())

		return nil
	})

	// 启动HTTP服务
	if err := http.ListenAndServe(":8080", app); err != nil {
		log.Fatal(err.Error())
	}
}

// 创建session引擎
func newEngine() error {
	var (
		err     error
		storage sessions.Storage
	)
	// 创建存储器
	storage, err = redis.New(&redis.Config{
		Addr: "127.0.0.1:6379", // redis server的地址
		Prefix: "sess",         // redis的key前缀
		Username: "",           // redis 6支持的用户名
		Password: "",           // redis的密码
		DB: 0,                  // redis的库
	})
	if err != nil {
		return err
	}
	// 创建session引擎
	engine, err = sessions.New(&sessions.Config{
		Key:         "sessionid", // cookie中的Session ID的键名,默认为"sessionid"
		HTTPOnly:    false,       // 仅允许HTTP读取,JS无法读取
		Domain:      "",          // 作用域名,默认为空
		Path:        "",          // 作用路径,默认为空
		IdleTimeout: 20 * 60,     // 空闲超时时间(秒)
		Secure:      false,       // 仅在HTTPS协议中有效
	}, storage)
	if err != nil {
		return err
	}
	return nil
}

更多示例见/test/目录中的单元测试文件

About

Go语言的Cookie Session包,支持Redis等多种存储引擎,可通用Go语言的net/http以及兼容该标准包的大部份Web框架

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages