package
0.0.0-20240109133218-bbbe29898a12
Repository: https://github.com/scliangx/webservertools.git
Documentation: pkg.go.dev

# README

session 实现流程

  • 该结构体主要是管理全局的session,因为session可能有多个,基于内存的,基于redis的等等,通过cookieName可以在改管理器中获取到对应的session对象

type Manager struct {
	cookieName  string
	lock        sync.Mutex //互斥锁
	storage SessionStorage   //存储session方式
	maxAge int64      //有效期
}
  • 该结构体主要是暴露出来session存储方式,可以自己实现
// SessionStorage session存储方式接口
type SessionStorage interface {
    // InitSessionObj 初始化一个session,sid根据需要生成后传入
    InitSessionObj(sid string) (Session, error)
    // GetSessionObj 根据sid,获取session
    GetSessionObj(sid string) (Session, error)
    // DestroySession 销毁session
    DestroySession(sid string) error
    //GC 回收
    GC(maxLifeTime int64)
}
  • 该结构体主要是session的实际增删改查操作
//Session 操作接口
type Session interface {
    Set(key, value interface{}) error
    Get(key interface{}) interface{}
    Delete(ket interface{}) error
    SessionID() string
}
  • case
func TestMemory(t *testing.T) {
	// 基于多重存储方式实现session,并且有一个唯一名称
	SessionInitByMemory("storeageName")
	SessionInitByMemory("storeageName1")
	// 实例化session管理器
	// 会根据storeageName拿去session,初始化为cookieName的一个管理器对象
	manager,_ := NewSessionManager("storeageName","cookieName",600)
	manager1,_ := NewSessionManager("storeageName1","cookieName1",600)
	// 根据storeageName 去管理器中获取对应的session对象,如果没有的话会进行初始化
	s, _ := manager.storage.GetSessionObj("storeageName")
	s1,_ := manager1.storage.GetSessionObj("storeageName1")
	// 操作
	_ = s.Set("web", "web")
	_ = s1.Set("web1", "web1")
	fmt.Println(s.Get("web").(string))
	fmt.Println(s1.Get("web1").(string))
	s1.Delete("web1")
	fmt.Println(s1.Get("web1"))
}

# Functions

NewSessionManager 实例化一个session管理器.
Register 注册 由实现Provider接口的结构体调用.
No description provided by the author

# Structs

FromMemory session来自内存 实现.
No description provided by the author
SessionStoreByMemory session实现.

# Interfaces

Session 操作接口.
SessionStorage session存储方式接口.