session

package
v0.6.5-beta Latest Latest
Warning

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

Go to latest
Published: May 1, 2022 License: Apache-2.0 Imports: 10 Imported by: 0

README

pepper/session

管理 session

通过内存储存数据

package main

import (
    "http"

    "github.com/K05A4B/pepper"
    "github.com/K05A4B/pepper/session"
)

var mery *Memory

func main(){
    // 创建一个 Session 管理器(内存)
	mery = session.NewMemory(&session.Options{
        // 生命周期(单位: 秒)
		LifeCycle: 60*60*12,
	})

	app := pepper.NewPepper()

	app.DebugMode = true
	
	app.Get("/set", set)
	app.Get("/get", get)

	app.Listen(":8080")
}

func set(res pepper.Response, req *pepper.Request) {
    name := req.Query("name")
    
    id := req.GetCookieValue("SessionID")
    
    if !mery.Exist(id) {
        id, _ = mery.Create()
        res.SetCookie(&http.Cookie{
            Name: "SessionID",
            Value: id,
            MaxAge: 60*60*12,
        })
    }

    sess := mery.Get(id)
    sess.Set("name", name)
}

func get(res pepper.Response, req *pepper.Request) {
    id := req.GetCookieValue("SessionID")
    
    if !mery.Exist(id) {
        res.SendErrorPage(403)
        return
    }

    sess := mery.Get(id)
    name := sess.Get("name")
    if name == nil {
        res.WriteString("nil")
        return
    }

    res.WriteString(name.(string))
}

通过文件加内存的方式储存数据

package main

import (
    "http"

    "github.com/K05A4B/pepper"
    "github.com/K05A4B/pepper/session"
)

var store *Store

func main(){
    var err error

    // 创建一个 Session 管理器(文件+内存)
	store, err = session.NewStore("./test_dir/session.dat", &session.Options{
		LifeCycle: 60*60*12,
	})
	if err != nil {
		fmt.Println("StoreError:", err)
		return
	}

	app := pepper.NewPepper()

	app.DebugMode = true
	
	app.Get("/set", set)
	app.Get("/get", get)

	app.Listen(":8080")
}

func set(res pepper.Response, req *pepper.Request) {
    name := req.Query("name")
    
    id := req.GetCookieValue("SessionID")
    
    if !store.Exist(id) {
        id, _ = store.Create()
        res.SetCookie(&http.Cookie{
            Name: "SessionID",
            Value: id,
            MaxAge: 60*60*12,
        })
    }

    sess := store.Get(id)
    sess.Set("name", name)
}

func get(res pepper.Response, req *pepper.Request) {
    id := req.GetCookieValue("SessionID")
    
    if !store.Exist(id) {
        res.SendErrorPage(403)
        return
    }

    sess := store.Get(id)
    name := sess.Get("name")
    if name == nil {
        res.WriteString("nil")
        return
    }

    res.WriteString(name.(string))
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DataBase

type DataBase struct {
	Memory
	// contains filtered or unexported fields
}

func NewDataBase

func NewDataBase(driver string, address string, opt *Options) (d *DataBase, err error)

func (*DataBase) Connect

func (d *DataBase) Connect() error

连接数据库

func (*DataBase) Create

func (d *DataBase) Create() (id string, sess *Session)

创建一个新的session id 和 对应的 session 对象

func (*DataBase) Disconnected

func (d *DataBase) Disconnected() error

关闭连接

func (*DataBase) Pull

func (d *DataBase) Pull() error

从数据库拉取数据

func (*DataBase) Push

func (d *DataBase) Push() error

推送数据

func (*DataBase) RemoteClean

func (d *DataBase) RemoteClean() error

清理数据库生命周期以结束的数据

func (*DataBase) RemoteCreate

func (d *DataBase) RemoteCreate(id string, sess *Session) error

追加新创建数据(数据库内无记录)

func (*DataBase) RemoteRemove

func (d *DataBase) RemoteRemove(idArr ...string) error

删除数据库指定 session id 的数据

func (*DataBase) RemoteUpdate

func (d *DataBase) RemoteUpdate(id string) error

更新数据库指定 session 数据

func (*DataBase) Remove

func (d *DataBase) Remove(id string)

删除本地数据 可以通过 Push 函数 推送到数据库

type Memory

type Memory struct {
	Data map[string]*Session
	// contains filtered or unexported fields
}

func NewMemory

func NewMemory(opt *Options) *Memory

创建通过 内存来储存 Session 对象的管理器

func (*Memory) Clean

func (m *Memory) Clean()

清理生命周期结束的 session 对象

func (*Memory) Create

func (m *Memory) Create() (string, *Session)

创建 session 对象

func (*Memory) Empty

func (m *Memory) Empty()

清除所有 session 对象

func (*Memory) Exist

func (m *Memory) Exist(id string) bool

检查 session id 对应的 session 对象是否存在

func (*Memory) Get

func (m *Memory) Get(id string) *Session

获取 session 对象

func (*Memory) Remove

func (m *Memory) Remove(id string)

删除 session 数据

type Options

type Options struct {
	LifeCycle      int64
	CleanInterval  int64
	HandlerGCError func(error)
}

type Session

type Session struct {
	Value          map[interface{}]interface{}
	LifeCycleStart int64
	// contains filtered or unexported fields
}

func (*Session) Empty

func (s *Session) Empty()

清除对象内所有数据

func (*Session) Exist

func (s *Session) Exist(key interface{}) bool

判断有没有这对键值对

func (*Session) Get

func (s *Session) Get(key interface{}) interface{}

通过 key 获取数据

func (*Session) Remove

func (s *Session) Remove(key interface{})

删除一个键值对

func (*Session) Set

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

设置 session 键值对

func (*Session) ToBinary

func (s *Session) ToBinary() (bin []byte, err error)

转成字符串数据

type Store

type Store struct {
	Memory
	// contains filtered or unexported fields
}

func NewStore

func NewStore(file string, opt *Options) (*Store, error)

创建通过 文件加内存来储存 Session 对象的管理器

func (*Store) Clean

func (s *Store) Clean()

func (*Store) Close

func (s *Store) Close() error

关闭对文件的操作

func (*Store) Reload

func (s *Store) Reload() error

重新加载数据

func (*Store) Save

func (s *Store) Save() error

保存数据到文件

Jump to

Keyboard shortcuts

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