美文网首页
Beego Session

Beego Session

作者: JunChow520 | 来源:发表于2021-01-04 16:44 被阅读0次
  • Session模块用于存储客户端用户会话数据
  • Session模块只支持Cookie方式的请求,若客户端不支持Cookie则无法使用。
  • Session模块参考database/sql引擎写法,采用一个接口多个实现的方式。
  • Session模块目前实现的存储驱动包括memory、file、Redis、MySQL

模块

安装模块

$ go get github.com/beego/beego/v2/server/web/session

配置

Session会话配置位于conf/app.go应用配置文件中,默认会话处于关闭状态,默认会话引擎采用的是memory

会话配置 默认值 描述
SessionOn false 是否开启会话
SessionProvider memory 会话引擎
SessionName beegosessionID 保存在客户端的Cookie名称
SessionGCMaxLifetime 3600 会话过期时长,默认3600秒。
SessionCookieLifeTime 3600 保存在客户端Cookie过期时长,默认3600秒。
SessionAutoSetCookie true 是否开启以客户端Cookie进行保存会话
SessionDomain "" 客户端Cookie存储域名

默认开启会话后,Beego会将服务端的会话数据保存在内存memory中。开启以客户端Cookie方式存储会话后,若浏览器关闭则会话数据会失效。

开启会话

$ vim conf/app.go
SessionOn = true

获取配置

默认可采用beego.BConfig.WebConfig.Session的方式获取或设置会话的配置选项

beego.BConfig.WebConfig.Session.SessionOn = false
beego.BConfig.WebConfig.Session.SessionProvider = "memory"
beego.BConfig.WebConfig.Session.SessionName = "beegosessionID"
beego.BConfig.WebConfig.Session.SessionGCMaxLifetime = 3600
beego.BConfig.WebConfig.Session.SessionCookieLifeTime = 3600
beego.BConfig.WebConfig.Session.SessionAutoSetCookie = true
beego.BConfig.WebConfig.Session.SessionDomain = ""

例如:使用文件方式存储会话

使用文件方式file存储会话时需定义会话保存路径,会话采用两级目录新建文件的方式根据SessionID来保存对应的Session文件。比如SessionID为015abf2467f55e1b1f799a683a2e0904,则会在sessionProviderConfig文件夹下创建0/1/015abf2467f55e1b1f799a683a2e0904文件来保存。

$ vim conf/app.go
sessionOn = true
sessionProvider = "file"
sessionProviderConfig = "./tmp/session"

导入

导入包

import "github.com/beego/beego/v2/server/web/session"

初始化

初始化全局变量用于存储会话控制器

操作

控制器模块中提供了便捷的方法来操作会话

// StartSession starts session and load old session data info this controller.
func (c *Controller) StartSession() session.Store {
    if c.CruSession == nil {
        c.CruSession = c.Ctx.Input.CruSession
    }
    return c.CruSession
}

// SetSession puts value into session.
func (c *Controller) SetSession(name interface{}, value interface{}) {
    if c.CruSession == nil {
        c.StartSession()
    }
    c.CruSession.Set(name, value)
}

// GetSession gets value from session.
func (c *Controller) GetSession(name interface{}) interface{} {
    if c.CruSession == nil {
        c.StartSession()
    }
    return c.CruSession.Get(name)
}

// DelSession removes value from session.
func (c *Controller) DelSession(name interface{}) {
    if c.CruSession == nil {
        c.StartSession()
    }
    c.CruSession.Delete(name)
}

// SessionRegenerateID regenerates session id for this session.
// the session data have no changes.
func (c *Controller) SessionRegenerateID() {
    if c.CruSession != nil {
        c.CruSession.SessionRelease(c.Ctx.ResponseWriter)
    }
    c.CruSession = GlobalSessions.SessionRegenerateID(c.Ctx.ResponseWriter, c.Ctx.Request)
    c.Ctx.Input.CruSession = c.CruSession
}

// DestroySession cleans session data and session cookie.
func (c *Controller) DestroySession() {
    c.Ctx.Input.CruSession.Flush()
    c.Ctx.Input.CruSession = nil
    GlobalSessions.SessionDestroy(c.Ctx.ResponseWriter, c.Ctx.Request)
}

使用GetSession()方法可获取会话中对应键的值

value := this.GetSession("key")

使用SetSession()方法可设置键值对到当前会话中

this.SetSession("key", value)

使用DelSession()方法可删除指定键的值,删除后值默认会为nil

this.DelSession("key")

相关文章

网友评论

      本文标题:Beego Session

      本文链接:https://www.haomeiwen.com/subject/hmifoktx.html