Go Session支持

2022-05-13 16:43 更新

第六章的時(shí)候我們介紹過(guò)如何在Go語(yǔ)言中使用session,也實(shí)現(xiàn)了一個(gè)sessionManger,beego框架基于sessionManager實(shí)現(xiàn)了方便的session處理功能。

session集成

beego中主要有以下的全局變量來(lái)控制session處理:

//related to session 
SessionOn            bool   // 是否開啟session模塊,默認(rèn)不開啟
SessionProvider      string // session后端提供處理模塊,默認(rèn)是sessionManager支持的memory
SessionName          string // 客戶端保存的cookies的名稱
SessionGCMaxLifetime int64  // cookies有效期

GlobalSessions *session.Manager //全局session控制器

當(dāng)然上面這些變量需要初始化值,也可以按照下面的代碼來(lái)配合配置文件以設(shè)置這些值:

if ar, err := AppConfig.Bool("sessionon"); err != nil {
    SessionOn = false
} else {
    SessionOn = ar
}
if ar := AppConfig.String("sessionprovider"); ar == "" {
    SessionProvider = "memory"
} else {
    SessionProvider = ar
}
if ar := AppConfig.String("sessionname"); ar == "" {
    SessionName = "beegosessionID"
} else {
    SessionName = ar
}
if ar, err := AppConfig.Int("sessiongcmaxlifetime"); err != nil && ar != 0 {
    int64val, _ := strconv.ParseInt(strconv.Itoa(ar), 10, 64)
    SessionGCMaxLifetime = int64val
} else {
    SessionGCMaxLifetime = 3600
}   

在beego.Run函數(shù)中增加如下代碼:

if SessionOn {
    GlobalSessions, _ = session.NewManager(SessionProvider, SessionName, SessionGCMaxLifetime)
    go GlobalSessions.GC()
}

這樣只要SessionOn設(shè)置為true,那么就會(huì)默認(rèn)開啟session功能,獨(dú)立開一個(gè)goroutine來(lái)處理session。

為了方便我們?cè)谧远xController中快速使用session,作者在beego.Controller中提供了如下方法:

func (c *Controller) StartSession() (sess session.Session) {
    sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
    return
}       

session使用

通過(guò)上面的代碼我們可以看到,beego框架簡(jiǎn)單地繼承了session功能,那么在項(xiàng)目中如何使用呢?

首先我們需要在應(yīng)用的main入口處開啟session:

beego.SessionOn = true

然后我們就可以在控制器的相應(yīng)方法中如下所示的使用session了:

func (this *MainController) Get() {
    var intcount int
    sess := this.StartSession()
    count := sess.Get("count")
    if count == nil {
        intcount = 0
    } else {
        intcount = count.(int)
    }
    intcount = intcount + 1
    sess.Set("count", intcount)
    this.Data["Username"] = "astaxie"
    this.Data["Email"] = "astaxie@gmail.com"
    this.Data["Count"] = intcount
    this.TplNames = "index.tpl"
}

上面的代碼展示了如何在控制邏輯中使用session,主要分兩個(gè)步驟:

  1. 獲取session對(duì)象

    //獲取對(duì)象,類似PHP中的session_start()
    sess := this.StartSession()
  2. 使用session進(jìn)行一般的session值操作

    //獲取session值,類似PHP中的$_SESSION["count"]
    sess.Get("count")
    
    //設(shè)置session值
    sess.Set("count", intcount)

從上面代碼可以看出基于beego框架開發(fā)的應(yīng)用中使用session相當(dāng)方便,基本上和PHP中調(diào)用session_start()類似。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)