beegoSession控制

2023-11-20 18:05 更新

beego 內(nèi)置了 session 模塊,目前 session 模塊支持的后端引擎包括 memory、cookie、file、mysql、redis、couchbase、memcache、postgres,用戶也可以根據(jù)相應(yīng)的 interface 實(shí)現(xiàn)自己的引擎。

beego 中使用 session 相當(dāng)方便,只要在 main 入口函數(shù)中設(shè)置如下:

beego.BConfig.WebConfig.Session.SessionOn = true

或者通過(guò)配置文件配置如下:

sessionon = true

通過(guò)這種方式就可以開(kāi)啟 session,如何使用 session,請(qǐng)看下面的例子:

func (this *MainController) Get() {
    v := this.GetSession("asta")
    if v == nil {
        this.SetSession("asta", int(1))
        this.Data["num"] = 0
    } else {
        this.SetSession("asta", v.(int)+1)
        this.Data["num"] = v.(int)
    }
    this.TplName = "index.tpl"
}

session 有幾個(gè)方便的方法:

  • SetSession(name string, value interface{})
  • GetSession(name string) interface{}
  • DelSession(name string)
  • SessionRegenerateID()
  • DestroySession()

session 操作主要有設(shè)置 session、獲取 session、刪除 session。

當(dāng)然你可以通過(guò)下面的方式自己控制這些邏輯:

sess:=this.StartSession()
defer sess.SessionRelease()

sess 對(duì)象具有如下方法:

  • sess.Set()
  • sess.Get()
  • sess.Delete()
  • sess.SessionID()
  • sess.Flush()

但是我還是建議大家采用 SetSession、GetSession、DelSession 三個(gè)方法來(lái)操作,避免自己在操作的過(guò)程中資源沒(méi)釋放的問(wèn)題。

關(guān)于 Session 模塊使用中的一些參數(shù)設(shè)置:

  • beego.BConfig.WebConfig.Session.SessionOn設(shè)置是否開(kāi)啟 Session,默認(rèn)是 false,配置文件對(duì)應(yīng)的參數(shù)名:sessionon。
  • beego.BConfig.WebConfig.Session.SessionProvider設(shè)置 Session 的引擎,默認(rèn)是 memory,目前支持還有 file、mysql、redis 等,配置文件對(duì)應(yīng)的參數(shù)名:sessionprovider。
  • beego.BConfig.WebConfig.Session.SessionName設(shè)置 cookies 的名字,Session 默認(rèn)是保存在用戶的瀏覽器 cookies 里面的,默認(rèn)名是 beegosessionID,配置文件對(duì)應(yīng)的參數(shù)名是:sessionname。
  • beego.BConfig.WebConfig.Session.SessionGCMaxLifetime設(shè)置 Session 過(guò)期的時(shí)間,默認(rèn)值是 3600 秒,配置文件對(duì)應(yīng)的參數(shù):sessiongcmaxlifetime。
  • beego.BConfig.WebConfig.Session.SessionProviderConfig設(shè)置對(duì)應(yīng) file、mysql、redis 引擎的保存路徑或者鏈接地址,默認(rèn)值是空,配置文件對(duì)應(yīng)的參數(shù):sessionproviderconfig。
  • beego.BConfig.WebConfig.Session.SessionHashFunc默認(rèn)值為 sha1,采用 sha1 加密算法生產(chǎn) sessionid
  • beego.BConfig.WebConfig.Session.SessionHashKey默認(rèn)的 key 是 beegoserversessionkey,建議用戶使用的時(shí)候修改該參數(shù)
  • beego.BConfig.WebConfig.Session.SessionCookieLifeTime設(shè)置 cookie 的過(guò)期時(shí)間,cookie 是用來(lái)存儲(chǔ)保存在客戶端的數(shù)據(jù)。

從 beego1.1.3 版本開(kāi)始移除了第三方依賴庫(kù),也就是如果你想使用 mysql、redis、couchbase、memcache、postgres 這些引擎,那么你首先需要安裝

go get -u github.com/astaxie/beego/session/mysql

然后在你的 main 函數(shù)中引入該庫(kù), 和數(shù)據(jù)庫(kù)的驅(qū)動(dòng)引入是一樣的:

import _ "github.com/astaxie/beego/session/mysql"

當(dāng) SessionProvider 為 file SessionProviderConfig 是指保存文件的目錄,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider="file"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "./tmp"

當(dāng) SessionProvider 為 mysql 時(shí),SessionProviderConfig 是鏈接地址,采用 go-sql-driver,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider = "mysql"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "username:password@protocol(address)/dbname?param=value"

需要特別注意的是,在使用 mysql 存儲(chǔ) session 信息的時(shí)候,需要事先在 mysql 創(chuàng)建表,建表語(yǔ)句如下
    CREATE TABLE `session` (
        `session_key` char(64) NOT NULL,
        `session_data` blob,
        `session_expiry` int(11) unsigned NOT NULL,
        PRIMARY KEY (`session_key`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

當(dāng) SessionProvider 為 redis 時(shí),SessionProviderConfig 是 redis 的鏈接地址,采用了 redigo,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider = "redis"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:6379"

當(dāng) SessionProvider 為 memcache 時(shí),SessionProviderConfig 是 memcache 的鏈接地址,采用了 memcache,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider = "memcache"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:7080"

當(dāng) SessionProvider 為 postgres 時(shí),SessionProviderConfig 是 postgres 的鏈接地址,采用了 postgres,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider = "postgresql"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full"

當(dāng) SessionProvider 為 couchbase 時(shí),SessionProviderConfig 是 couchbase 的鏈接地址,采用了 couchbase,如下所示:

beego.BConfig.WebConfig.Session.SessionProvider = "couchbase"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "http://bucketname:bucketpass@myserver:8091"

特別注意點(diǎn)

因?yàn)?session 內(nèi)部采用了 gob 來(lái)注冊(cè)存儲(chǔ)的對(duì)象,例如 struct,所以如果你采用了非 memory 的引擎,請(qǐng)自己在 main.go 的 init 里面注冊(cè)需要保存的這些結(jié)構(gòu)體,不然會(huì)引起應(yīng)用重啟之后出現(xiàn)無(wú)法解析的錯(cuò)誤。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)