session类

package
v0.0.0-...-7e18bce Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2024 License: MIT Imports: 19 Imported by: 0

Documentation

Overview

gsession 包实现了会话的管理与存储功能。 md5:743dbbcf3d74735d

Index

Examples

Constants

View Source
const (
	DefaultStorageFileCryptoEnabled        = false
	DefaultStorageFileUpdateTTLInterval    = 10 * time.Second
	DefaultStorageFileClearExpiredInterval = time.Hour
)
View Source
const (
	// DefaultStorageRedisLoopInterval 是用于在最近一段时间内更新会话ID的TTL(生存时间)的间隔。
	// md5:5adbee0aa8ff1658
	DefaultStorageRedisLoopInterval = 10 * time.Second
)

Variables

View Source
var (
	DefaultStorageFilePath      = gfile.X取临时目录("gsessions")
	DefaultStorageFileCryptoKey = []byte("Session storage file crypto key!")
)
View Source
var (
	// ErrorDisabled 用于标记某些接口函数未被使用。 md5:2a81adf17310353b
	ErrorDisabled = gerror.NewWithOption(gerror.Option{
		Text: "this feature is disabled in this storage",
		Code: gcode.CodeNotSupported,
	})
)

Functions

func NewSessionId

func NewSessionId() string

NewSessionId 创建并返回一个新的、唯一的会话ID字符串,该字符串长度为32字节。 md5:c16016979687f8e5

Types

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager for sessions.

func New

func New(ttl time.Duration, storage ...Storage) *Manager

New 创建并返回一个新的会话管理器。 md5:f41a96ed9e4273e4

Example
package main

import (
	"fmt"
	"time"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	manager := gsession.New(time.Second)
	fmt.Println(manager.GetTTL())

}
Output:

1s

func (*Manager) GetStorage

func (m *Manager) GetStorage() Storage

GetStorage 返回当前会话管理器的存储对象。 md5:43cdd2b5155f8389

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	manager := gsession.New(time.Second, gsession.NewStorageMemory())
	size, _ := manager.GetStorage().GetSize(gctx.X创建(), "id")
	fmt.Println(size)

}
Output:

0

func (*Manager) GetTTL

func (m *Manager) GetTTL() time.Duration

GetTTL 返回会话管理器的TTL(时间到 live,生存时间)。 md5:d0733ac8b424fbe1

func (*Manager) New

func (m *Manager) New(ctx context.Context, sessionId ...string) *Session

New 为给定的 session ID 创建或获取会话。 参数 `sessionId` 是可选的,如果未提供,则根据 Storage.New 的行为创建新的会话。 md5:4d84930c3cbf9027

func (*Manager) SetStorage

func (m *Manager) SetStorage(storage Storage)

SetStorage 设置管理器的会话存储。 md5:9fe6b2a9a6ae9990

Example
package main

import (
	"fmt"
	"time"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	manager := gsession.New(time.Second)
	manager.SetStorage(gsession.NewStorageMemory())
	fmt.Println(manager.GetTTL())

}
Output:

1s

func (*Manager) SetTTL

func (m *Manager) SetTTL(ttl time.Duration)

SetTTL 设置会话管理器的生存时间(TTL)。 md5:bba913d23693cf2a

Example
package main

import (
	"fmt"
	"time"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	manager := gsession.New(time.Second)
	manager.SetTTL(time.Minute)
	fmt.Println(manager.GetTTL())

}
Output:

1m0s

type Session

type Session struct {
	// contains filtered or unexported fields
}

Session 结构体,用于存储单个会话数据,它与单个请求绑定。Session 结构体是与用户交互的接口,但 Storage 是底层适配器设计的接口,用于实现特定功能。 md5:1d1b86dcb53a276e

func (*Session) Close

func (s *Session) Close() error

Close 方法关闭当前会话并在会话管理器中更新其TTL(生存时间)。 如果此会话已被修改(脏会话),它还会将该会话导出到存储中。

注意:此功能必须在每次会话请求完成后调用。 md5:f68a83f493f4727a

func (*Session) Contains

func (s *Session) Contains(key string) (ok bool, err error)

Contains 检查键是否存在于会话中。 md5:7a03d1ea75cda393

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)

	s1 := manager.New(gctx.X创建())
	notContains, _ := s1.Contains("Contains")
	fmt.Println(notContains)

	s2 := manager.New(gctx.X创建(), "Contains")
	contains, _ := s2.Contains("Contains")
	fmt.Println(contains)

}
Output:

false
false

func (*Session) Data

func (s *Session) Data() (sessionData map[string]interface{}, err error)

Data 将所有数据作为映射返回。 请注意,为了并发安全,它内部使用了值拷贝。 md5:a37827aba4dd5df4

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)

	s1 := manager.New(gctx.X创建())
	data1, _ := s1.Data()
	fmt.Println(data1)

	s2 := manager.New(gctx.X创建(), "id_data")
	data2, _ := s2.Data()
	fmt.Println(data2)

}
Output:

map[]
map[]

func (*Session) Get

func (s *Session) Get(key string, def ...interface{}) (value *gvar.Var, err error)

Get 通过给定的键获取 session 值。 如果键在 session 中不存在且提供了 `def`,则返回 `def`, 否则返回 nil。 md5:893a612d87b25ee2

func (*Session) Id

func (s *Session) Id() (id string, err error)

Id 返回此会话的会话标识符。 如果在初始化时未传递会话标识符,则创建并返回新的会话标识符。 md5:c1a4c6b98633e656

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s := manager.New(gctx.X创建(), "Id")
	id, _ := s.Id()
	fmt.Println(id)

}
Output:

Id

func (*Session) IsDirty

func (s *Session) IsDirty() bool

IsDirty 检查会话中是否有数据变更。 md5:2a726ce013b067fe

func (*Session) MustContains

func (s *Session) MustContains(key string) bool

MustContains执行Contains函数的功能,但如果发生任何错误,它将引发恐慌。 md5:b9f29f0374157bc5

func (*Session) MustData

func (s *Session) MustData() map[string]interface{}

MustData 执行与函数 Data 相同的操作,但如果发生任何错误,它将引发恐慌。 md5:ae01e79f6f27c9fe

func (*Session) MustGet

func (s *Session) MustGet(key string, def ...interface{}) *gvar.Var

MustGet执行与Get相同的功能,但如果发生任何错误,它将引发恐慌。 md5:bdc72a85510733d5

func (*Session) MustId

func (s *Session) MustId() string

MustId 行为就像Id函数一样,但如果发生任何错误,它会引发恐慌。 md5:a51e8673adaf6727

func (*Session) MustRemove

func (s *Session) MustRemove(keys ...string)

MustRemove 行为与函数 Remove 相同,但如果发生任何错误则会引发恐慌。 md5:76bd8c9cb1e6223b

func (*Session) MustSet

func (s *Session) MustSet(key string, value interface{})

MustSet 的功能与 Set 函数相同,但如果发生任何错误,它会直接 panic。 md5:06fa308e1636bcfa

func (*Session) MustSetMap

func (s *Session) MustSetMap(data map[string]interface{})

MustSetMap 行为类似于函数 SetMap,但如果发生任何错误则会引发 panic。 md5:3d54948e22292bcf

func (*Session) MustSize

func (s *Session) MustSize() int

MustSize 的行为与 Size 函数相同,但如果发生任何错误,它会直接 panic。 md5:d9d8c4724cdd0db4

func (*Session) Remove

func (s *Session) Remove(keys ...string) (err error)

Remove 从本次会话中移除指定的键及其对应的值。 md5:3dc440da200c0834

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s1 := manager.New(gctx.X创建())
	fmt.Println(s1.Remove("key"))

	s2 := manager.New(gctx.X创建(), "Remove")
	fmt.Println(s2.Remove("key"))

}
Output:

<nil>
<nil>

func (*Session) RemoveAll

func (s *Session) RemoveAll() (err error)

RemoveAll 从该会话中删除所有键值对。 md5:6ca756339a9f18b5

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s1 := manager.New(gctx.X创建())
	fmt.Println(s1.RemoveAll())

	s2 := manager.New(gctx.X创建(), "Remove")
	fmt.Println(s2.RemoveAll())

}
Output:

<nil>
<nil>

func (*Session) SetId

func (s *Session) SetId(id string) error

SetId 在会话开始前设置自定义会话。如果在会话已经开始后调用,将返回错误。 md5:cf8fd98a6cd07079

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	nilSession := &gsession.Session{}
	fmt.Println(nilSession.SetId("id"))

	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s := manager.New(gctx.X创建())
	s.Id()
	fmt.Println(s.SetId("id"))

}
Output:

<nil>
session already started

func (*Session) SetIdFunc

func (s *Session) SetIdFunc(f func(ttl time.Duration) string) error

SetIdFunc 在会话开始前设置自定义会话ID生成函数。 如果在会话已经开始后调用它,将返回错误。 md5:07c5962c3c68bf37

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	nilSession := &gsession.Session{}
	fmt.Println(nilSession.SetIdFunc(func(ttl time.Duration) string {
		return "id"
	}))

	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s := manager.New(gctx.X创建())
	s.Id()
	fmt.Println(s.SetIdFunc(func(ttl time.Duration) string {
		return "id"
	}))

}
Output:

<nil>
session already started

func (*Session) SetMap

func (s *Session) SetMap(data map[string]interface{}) (err error)

SetMap 批量使用映射设置会话。 md5:f55c78b98e85ba61

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)
	s := manager.New(gctx.X创建())
	fmt.Println(s.SetMap(map[string]interface{}{}) == nil)

}
Output:

true

func (*Session) Size

func (s *Session) Size() (size int, err error)

Size返回会话的大小。 md5:072795e87a3938d1

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	manager := gsession.New(time.Second, storage)

	s1 := manager.New(gctx.X创建())
	size1, _ := s1.Size()
	fmt.Println(size1)

	s2 := manager.New(gctx.X创建(), "Size")
	size2, _ := s2.Size()
	fmt.Println(size2)

}
Output:

0
0

func (*Session) X设置值

func (s *Session) X设置值(key string, value interface{}) (err error)

X设置值 将键值对设置到这个会话中。 md5:09e1539c4a50fcfd

type Storage

type Storage interface {
	// New 创建一个自定义会话ID。
	// 此函数可用于自定义会话创建。
	// md5:bf8b403018c5c6df
	New(ctx context.Context, ttl time.Duration) (sessionId string, err error)

	// Get 通过给定的键获取并返回会话中的特定值。
	// 如果键在会话中不存在,则返回nil。
	// md5:2584a452a5632118
	Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)

	// GetSize 从存储中获取并返回键值对的大小。 md5:2c41726f18e2cd04
	GetSize(ctx context.Context, sessionId string) (size int, err error)

	// Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b
	Data(ctx context.Context, sessionId string) (sessionData map[string]interface{}, err error)

	// X设置值 将一个键值对设置到存储中。
	// 参数 `ttl` 指定了会话 ID 的过期时间。
	// md5:f141e9b5de211364
	X设置值(ctx context.Context, sessionId string, key string, value interface{}, ttl time.Duration) error

	// SetMap 批量将键值对设置为存储中的会话映射。参数 `ttl` 指定会话 ID 的过期时间。
	// md5:be3d6b9412b66e49
	SetMap(ctx context.Context, sessionId string, mapData map[string]interface{}, ttl time.Duration) error

	// Remove 从存储中删除指定会话中的键值对。 md5:3887f6d1acd56ad6
	Remove(ctx context.Context, sessionId string, key string) error

	// RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4
	RemoveAll(ctx context.Context, sessionId string) error

	// GetSession 从存储中返回给定会话的数据,数据类型为 `*gmap.StrAnyMap`。
	//
	// 参数 `ttl` 指定了该会话的生存时间(TTL)。
	// 参数 `data` 是当前存储在内存中的旧会话数据,对于某些存储,如果禁用了内存存储,此参数可能为 `nil`。
	//
	// 这个函数会在每次会话开始时被调用。
	// 如果会话不存在或者其 TTL 已过期,它将返回 `nil`。
	// md5:a495b20f42259c94
	GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)

	// SetSession 更新指定会话ID的数据。
	// 在关闭已更改的会话后,都会调用此函数。这个函数将内存中的所有会话数据映射复制到存储中。
	// md5:16766d7e58c61924
	SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

	// UpdateTTL 更新指定会话ID的TTL(时间到 live)。
	// 在非脏会话关闭后,将调用此函数。
	// md5:29eae01946af2846
	UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error
}

Storage是会话存储的接口定义。 md5:3c03cfdd3299edcc

type StorageBase

type StorageBase struct{}

StorageBase是会话存储的基本实现。 md5:9a65ccca10de1608

func (*StorageBase) Data

func (s *StorageBase) Data(ctx context.Context, sessionId string) (sessionData map[string]interface{}, err error)

Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b

func (*StorageBase) Get

func (s *StorageBase) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)

Get 使用给定的键获取会话中的特定值。 如果键在会话中不存在,则返回nil。 md5:c1696c0fb72c680b

func (*StorageBase) GetSession

func (s *StorageBase) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)

GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。

参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。

此函数在会话启动时会被调用。 md5:01e56ce09d5fd934

func (*StorageBase) GetSize

func (s *StorageBase) GetSize(ctx context.Context, sessionId string) (size int, err error)

GetSize 从存储中检索键值对的大小。 md5:9dcc1d87ddc0a989

func (*StorageBase) New

func (s *StorageBase) New(ctx context.Context, ttl time.Duration) (id string, err error)

New 创建一个会话 ID。 此函数可用于自定义会话创建。 md5:ffcd61f72bd1d22b

func (*StorageBase) Remove

func (s *StorageBase) Remove(ctx context.Context, sessionId string, key string) error

Remove 删除存储中键及其对应的值。 md5:95ea150955b88994

func (*StorageBase) RemoveAll

func (s *StorageBase) RemoveAll(ctx context.Context, sessionId string) error

RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4

func (*StorageBase) SetMap

func (s *StorageBase) SetMap(ctx context.Context, sessionId string, mapData map[string]interface{}, ttl time.Duration) error

SetMap 使用映射批量设置键值对会话到存储中。 参数 `ttl` 指定了会话ID的TTL(并非针对键值对)。 md5:a1bf3a748ba4aef3

func (*StorageBase) SetSession

func (s *StorageBase) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4

func (*StorageBase) UpdateTTL

func (s *StorageBase) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error

UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab

func (*StorageBase) X设置值

func (s *StorageBase) X设置值(ctx context.Context, sessionId string, key string, value interface{}, ttl time.Duration) error

X设置值 将键值对设置到存储中。 参数 `ttl` 指定了会话 ID 的过期时间(而不是键值对)。 md5:561e667e69e855f6

type StorageFile

type StorageFile struct {
	StorageBase
	// contains filtered or unexported fields
}

StorageFile实现了使用文件系统作为会话存储的接口。 md5:bae13bc406aa3178

func NewStorageFile

func NewStorageFile(path string, ttl time.Duration) *StorageFile

NewStorageFile 创建并返回一个用于会话的文件存储对象。 md5:047619bd552117d1

func (*StorageFile) GetSession

func (s *StorageFile) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (sessionData *gmap.StrAnyMap, err error)

GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。

参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。

此函数在会话启动时会被调用。 md5:01e56ce09d5fd934

func (*StorageFile) RemoveAll

func (s *StorageFile) RemoveAll(ctx context.Context, sessionId string) error

RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73

func (*StorageFile) SetCryptoEnabled

func (s *StorageFile) SetCryptoEnabled(enabled bool)

SetCryptoEnabled 启用/禁用会话存储的加密功能。 md5:14228b4577da32ec

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	storage.SetCryptoEnabled(true)

	size, _ := storage.GetSize(gctx.X创建(), "id")
	fmt.Println(size)

}
Output:

0

func (*StorageFile) SetCryptoKey

func (s *StorageFile) SetCryptoKey(key []byte)

SetCryptoKey 设置会话存储的加密密钥。 当启用加密功能时,将使用此加密密钥。 md5:dbc53d710307bd28

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageFile("", time.Second)
	storage.SetCryptoKey([]byte("key"))

	size, _ := storage.GetSize(gctx.X创建(), "id")
	fmt.Println(size)

}
Output:

0

func (*StorageFile) SetSession

func (s *StorageFile) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4

func (*StorageFile) UpdateTTL

func (s *StorageFile) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error

UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab

Example
package main

import (
	"fmt"
	"time"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	var (
		ctx = gctx.X创建()
	)

	storage := gsession.NewStorageFile("", time.Second)
	fmt.Println(storage.UpdateTTL(ctx, "id", time.Second*15))

	time.Sleep(time.Second * 11)

}
Output:

<nil>

type StorageMemory

type StorageMemory struct {
	StorageBase
	// contains filtered or unexported fields
}

StorageMemory 使用内存实现了会话存储接口。 md5:1a9a78b3bd5a138b

func NewStorageMemory

func NewStorageMemory() *StorageMemory

NewStorageMemory 创建并返回一个用于会话的内存存储对象。 md5:9b1b616d48dd808e

func (*StorageMemory) GetSession

func (s *StorageMemory) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)

GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。

参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。

此函数在会话启动时会被调用。 md5:01e56ce09d5fd934

func (*StorageMemory) RemoveAll

func (s *StorageMemory) RemoveAll(ctx context.Context, sessionId string) error

RemoveAll 从存储中删除会话。 md5:488d9f9ca747e8e4

func (*StorageMemory) SetSession

func (s *StorageMemory) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4

func (*StorageMemory) UpdateTTL

func (s *StorageMemory) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error

UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab

type StorageRedis

type StorageRedis struct {
	StorageBase
	// contains filtered or unexported fields
}

StorageRedis 使用Redis实现会话存储接口。 md5:df4e47711869aaf9

func NewStorageRedis

func NewStorageRedis(redis *gredis.Redis, prefix ...string) *StorageRedis

NewStorageRedis 创建并返回一个用于session的redis存储对象。 md5:58528aab48b7daea

func (*StorageRedis) GetSession

func (s *StorageRedis) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)

GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。

参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。

此函数在会话启动时会被调用。 md5:01e56ce09d5fd934

func (*StorageRedis) RemoveAll

func (s *StorageRedis) RemoveAll(ctx context.Context, sessionId string) error

RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedis(g.Redis类())
	err := storage.RemoveAll(gctx.X创建(), "id")
	fmt.Println(err != nil)

	// May Output:
	// true
}
Output:

func (*StorageRedis) SetSession

func (s *StorageRedis) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4

func (*StorageRedis) UpdateTTL

func (s *StorageRedis) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error

UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab

Example
package main

import (
	"fmt"
	"time"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedis(g.Redis类())
	err := storage.UpdateTTL(gctx.X创建(), "id", time.Second*15)
	fmt.Println(err)

	time.Sleep(time.Second * 11)

	// May Output:
	// <nil>
}
Output:

type StorageRedisHashTable

type StorageRedisHashTable struct {
	StorageBase
	// contains filtered or unexported fields
}

StorageRedisHashTable 是使用 Redis 哈希表实现的会话存储接口。 md5:4479b82640ee5fc6

func NewStorageRedisHashTable

func NewStorageRedisHashTable(redis *gredis.Redis, prefix ...string) *StorageRedisHashTable

NewStorageRedisHashTable 创建并返回一个用于会话的redis哈希表存储对象。 md5:7d5ec78a44d3be11

func (*StorageRedisHashTable) Data

func (s *StorageRedisHashTable) Data(ctx context.Context, sessionId string) (data map[string]interface{}, err error)

Data 从存储中获取所有的键值对并将其作为映射返回。 md5:7160c6695dcc211b

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	data, err := storage.Data(gctx.X创建(), "id")

	fmt.Println(data)
	fmt.Println(err)

	// May Output:
	// map[]
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) Get

func (s *StorageRedisHashTable) Get(ctx context.Context, sessionId string, key string) (value interface{}, err error)

Get 通过给定的键获取会话值。 如果该键不存在于会话中,它将返回nil。 md5:dd25fb53030b0080

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	v, err := storage.Get(gctx.X创建(), "id", "key")

	fmt.Println(v)
	fmt.Println(err)

	// May Output:
	// <nil>
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) GetSession

func (s *StorageRedisHashTable) GetSession(ctx context.Context, sessionId string, ttl time.Duration) (*gmap.StrAnyMap, error)

GetSession 从存储中根据给定的会话ID获取会话数据,返回一个指向*gmap.StrAnyMap的指针。

参数`ttl`指定了此会话的有效期,如果超过有效期,则返回nil。参数`data`是当前存储在内存中的旧会话数据,对于某些存储方式,如果禁用了内存存储,它可能会为nil。

此函数在会话启动时会被调用。 md5:01e56ce09d5fd934

Example
package main

import (
	"fmt"
	"time"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())
	data, err := storage.GetSession(gctx.X创建(), "id", time.Second)

	fmt.Println(data)
	fmt.Println(err)

	// May Output:
	//
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) GetSize

func (s *StorageRedisHashTable) GetSize(ctx context.Context, sessionId string) (size int, err error)

GetSize 从存储中检索键值对的大小。 md5:9dcc1d87ddc0a989

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	size, err := storage.GetSize(gctx.X创建(), "id")

	fmt.Println(size)
	fmt.Println(err)

	// May Output:
	// 0
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) Remove

func (s *StorageRedisHashTable) Remove(ctx context.Context, sessionId string, key string) error

Remove 删除存储中键及其对应的值。 md5:95ea150955b88994

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	err := storage.Remove(gctx.X创建(), "id", "key")

	fmt.Println(err)

	// May Output:
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) RemoveAll

func (s *StorageRedisHashTable) RemoveAll(ctx context.Context, sessionId string) error

RemoveAll 删除存储中的所有键值对。 md5:8b06607595d19a73

Example
package main

import (
	"fmt"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	err := storage.RemoveAll(gctx.X创建(), "id")

	fmt.Println(err)

	// May Output:
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) SetMap

func (s *StorageRedisHashTable) SetMap(ctx context.Context, sessionId string, data map[string]interface{}, ttl time.Duration) error

SetMap 使用映射批量设置键值对会话到存储中。 参数 `ttl` 指定了会话ID的TTL(并非针对键值对)。 md5:a1bf3a748ba4aef3

func (*StorageRedisHashTable) SetSession

func (s *StorageRedisHashTable) SetSession(ctx context.Context, sessionId string, sessionData *gmap.StrAnyMap, ttl time.Duration) error

SetSession 根据指定的会话ID更新数据映射。 当某个被标记为脏(即发生过修改)的会话关闭后,将调用此函数。 该操作会将所有会话数据从内存复制到存储中。 md5:1caa26989d884fa4

Example
package main

import (
	"fmt"
	"time"

	gmap "gitee.com/go_888/goframe/container/gmap"
	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	strAnyMap := gmap.StrAnyMap{}

	err := storage.SetSession(gctx.X创建(), "id", &strAnyMap, time.Second)

	fmt.Println(err)

	// May Output:
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) UpdateTTL

func (s *StorageRedisHashTable) UpdateTTL(ctx context.Context, sessionId string, ttl time.Duration) error

UpdateTTL 更新指定会话ID的生存时间(TTL)。 当一个未被修改(非脏)的会话关闭后,此函数会被调用。 它只是将会话ID添加到异步处理队列中。 md5:cc5ac287cbbc0eab

Example
package main

import (
	"fmt"
	"time"

	"gitee.com/go_888/goframe/frame/g"

	gctx "gitee.com/go_888/goframe/os/gctx"

	gsession "gitee.com/go_888/goframe/os/gsession"
)

func main() {
	storage := gsession.NewStorageRedisHashTable(g.Redis类())

	err := storage.UpdateTTL(gctx.X创建(), "id", time.Second)

	fmt.Println(err)

	// May Output:
	// redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
}
Output:

func (*StorageRedisHashTable) X设置值

func (s *StorageRedisHashTable) X设置值(ctx context.Context, sessionId string, key string, value interface{}, ttl time.Duration) error

X设置值 将键值对设置到存储中。 参数 `ttl` 指定了会话 ID 的过期时间(而不是键值对)。 md5:561e667e69e855f6

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL