iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
Modern Web

BeeGo系列 第 13

Session(1)

今天要來介紹 Session。

設定

需要在設定裡啟用。

SessionOn = true

啟用之後,要重新啟動。

設定裡也可以指定過期時間、Cookie等。

# 指定 session cookie 名稱
SessionName = "beegosessionID"

# 指定過期時間,單位是秒
SessionGCMaxLifetime = 3600

# 瀏覽器端 cookie 的過期時間,單位是秒
SessionCookieLifeTime = 3600

# 使用 SetCookie
SessionAutoSetCookie = true

# 設定 session cookie domain
SessionDomain = ""

Session 後台的提供者預設是 memory,BeeGo 有提供 mysql, redis, ledis, postgres, memcache, couchbase, ssdb 等後台提供者,要換成別的,可以在設定裡指定。以下是幾種常用的後台提供者設定說明:

# 使用記憶體
SessionProvider = "memory"

# 使用 Redis
SessionProvider = "redis"
# 格式以逗號分隔:server_addr_and_port,pool_size,password,db_num,idle_timeout_in_second
SessionProviderConfig = "127.0.0.1:6379,100,astaxie,0,30"

# 使用 memcache
SessionProvider = "memcache"
# 格式以分號分隔:server1_addr_and_port;server2_addr_and_port;...
SessionProviderConfig = "10.0.0.1:11211;10.0.0.2:11211;10.0.0.3:11212"

# 使用 mysql
SessionProvider = "mysql"
# 格式:[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]
SessionProviderConfig = "user:password@tcp(127.0.0.1:3306)/hello"

# 使用 postgresql
SessionProvider = "postgresql"
# 格式有兩種,第1種以空白分隔,基本的元素有 host, port, user, password, dbname, sslmode
# 例如:host=127.0.0.1 port=5432 user=postgres password=your_password dbname=database_name sslmode=disable
# 第2種,類似 database url
# 例如:postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full
SessionProviderConfig = "host=127.0.0.1 port=5432 user=postgres password=your_password dbname=database_name sslmode=disable"

其他像 ledis, couchbase, ssdb 就暫且按下不表。有需要的人可以參考 beego 原始碼 (beego/session) 下的檔案,主要閱讀重點:

  1. init() 裡的 Register():這裡決定了 SessionProvider 該用什麼字串。
  2. SessionInit():會在這裡處理 savePath ,這個 savePath 就是 SessionProviderConfig 的內容。

使用

BeeGo 已經把 Session 的操作預先包在 Controller 裡,有這些函式可以使用

  • 在 Session 指定鍵值:SetSession(name, value)
  • 從 Session 取得指定鍵值:GetSession(name)
  • 從 Session 刪除指定鍵值:DelSession(name)
  • 產生獨一的 ID,主要是內部使用:SessionRegenerateID()
  • 清理 Session:DestroySession()
    func (this *MainController) Get() {
        key := "asta"
        // 從 session 取得指定鍵值
        v := this.GetSession(key)
        if v == nil {
            // 設定
            this.SetSession(key, int(1))
            this.Data["num"] = 0
        } else {
            // 設定
            this.SetSession(key, v.(int)+1)
            this.Data["num"] = v.(int)
        }
        this.TplNames = "index.tpl"
    }

有這些,基本上就不需要再去看官方文件裡的 Session Module


上一篇
Cache
下一篇
Session(2)
系列文
BeeGo30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言