[TOC]
# session 控制
beego 內置了 session 模塊,目前 session 模塊支持的后端引擎包括 memory、cookie、file、mysql、redis、couchbase、memcache、postgres,用戶也可以根據相應的 interface 實現自己的引擎。
beego 中使用 session 相當方便,只要在 main 入口函數中設置如下:
beego.SessionOn = true
或者通過配置文件配置如下:
sessionon = true
通過這種方式就可以開啟 session,如何使用 session,請看下面的例子:
```go
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 有幾個方便的方法:
- SetSession(name string, value interface{})
- GetSession(name string) interface{}
- DelSession(name string)
- SessionRegenerateID()
- DestroySession()
session 操作主要有設置 session、獲取 session、刪除 session。
當然你要可以通過下面的方式自己控制相應的邏輯這些邏輯:
sess:=this.StartSession()
defer sess.SessionRelease()
sess 對象具有如下方法:
* sess.Set()
* sess.Get()
* sess.Delete()
* sess.SessionID()
* sess.Flush()
但是我還是建議大家采用 SetSession、GetSession、DelSession 三個方法來操作,避免自己在操作的過程中資源沒釋放的問題。
關于 Session 模塊使用中的一些參數設置:
- SessionOn
設置是否開啟 Session,默認是 false,配置文件對應的參數名:sessionon。
- SessionProvider
設置 Session 的引擎,默認是 memory,目前支持還有 file、mysql、redis 等,配置文件對應的參數名:sessionprovider。
- SessionName
設置 cookies 的名字,Session 默認是保存在用戶的瀏覽器 cookies 里面的,默認名是 beegosessionID,配置文件對應的參數名是:sessionname。
- SessionGCMaxLifetime
設置 Session 過期的時間,默認值是 3600 秒,配置文件對應的參數:sessiongcmaxlifetime。
- SessionSavePath
設置對應 file、mysql、redis 引擎的保存路徑或者鏈接地址,默認值是空,配置文件對應的參數:sessionsavepath。
- SessionHashFunc
默認值為sha1,采用sha1加密算法生產sessionid
- SessionHashKey
默認的key是beegoserversessionkey,建議用戶使用的時候修改該參數
- SessionCookieLifeTime
設置cookie的過期時間,cookie是用來存儲保存在客戶端的數據。
從beego1.1.3版本開始移除了第三方依賴庫,也就是如果你想使用mysql、redis、couchbase、memcache、postgres這些引擎,那么你首先需要安裝
go get -u github.com/astaxie/beego/session/mysql
然后在你的 main 函數中引入該庫, 和數據庫的驅動引入是一樣的:
import _ "github.com/astaxie/beego/session/mysql"
當 SessionProvider 為 file 時,SessionSavePath 是只保存文件的目錄,如下所示:
beego.SessionProvider = "file"
beego.SessionSavePath = "./tmp"
當 SessionProvider 為 mysql 時,SessionSavePath 是鏈接地址,采用 [go-sql-driver](https://github.com/go-sql-driver/mysql),如下所示:
beego.SessionProvider = "mysql"
beego.SessionSavePath = "username:password@protocol(address)/dbname?param=value"
當 SessionProvider 為 redis 時,SessionSavePath 是 redis 的鏈接地址,采用了 [redigo](https://github.com/garyburd/redigo),如下所示:
beego.SessionProvider = "redis"
beego.SessionSavePath = "127.0.0.1:6379"
當 SessionProvider 為 memcache 時,SessionSavePath 是 memcache 的鏈接地址,采用了 [memcache](https://github.com/beego/memcache),如下所示:
beego.SessionProvider = "memcache"
beego.SessionSavePath = "127.0.0.1:7080"
當 SessionProvider 為 postgres 時,SessionSavePath 是 postgres 的鏈接地址,采用了 [postgres](https://github.com/lib/pq),如下所示:
beego.SessionProvider = "postgresql"
beego.SessionSavePath = "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full"
當 SessionProvider 為 couchbase 時,SessionSavePath 是 couchbase 的鏈接地址,采用了 [couchbase](https://github.com/couchbaselabs/go-couchbase),如下所示:
beego.SessionProvider = "couchbase"
beego.SessionSavePath = "http://bucketname:bucketpass@myserver:8091/"
## 特別注意點
因為session內部采用了gob來注冊存儲的對象,例如struct,所以如果你采用了非memory的引擎,請自己在main.go的init里面注冊需要保存的這些結構體,不然會引起應用重啟之后出現無法解析的錯誤
- 寫在前面的話
- 第0章 beego 簡介
- 0.1 為beego貢獻
- 0.2 發布版本
- 0.3 升級指南
- 第1章 安裝升級
- 1.1 bee工具的使用
- 第2章 快速入門
- 2.1 新建項目
- 2.2 路由設置
- 2.3 Controller運行機制
- 2.4 Model邏輯
- 2.5 View編寫
- 2.6 靜態文件處理
- 第3章 beego的MVC架構
- 3.1 Model設計
- 3.1.1 概述
- 3.1.2 ORM使用
- 3.1.3 CRUD操作
- 3.1.4 高級查詢
- 3.1.5 原生SQL查詢
- 3.1.6 構造查詢
- 3.1.7 事物處理
- 3.1.8 模型定義
- 3.1.9 命令模式
- 3.1.10 測試用例
- 3.1.11 自定義字段
- 3.1.12 FAQ
- 3.2 View設計
- 3.2.1 模板語法指南
- 3.2.2 模板處理
- 3.2.3 模板函數
- 3.2.4 靜態文件處理
- 3.2.5 模板分頁處理
- 3.3 Controller設計
- 3.3.1 參數配置
- 3.3.2 路由設置
- 3.3.3 控制器函數
- 3.3.4 XSRF過濾
- 3.3.5 請求數據處理
- 3.3.6 session 控制
- 3.3.7 過濾器
- 3.3.8 flash 數據
- 3.3.9 URL構建
- 3.3.10 多種格式數據輸出
- 3.3.11 表單數據驗證
- 3.3.12 錯誤處理
- 3.3.13 日志處理
- 第4章 beego的模塊設計
- 4.1 session 模塊
- 4.2 grace 模塊
- 4.3 cache 模塊
- 4.4 logs 模塊
- 4.5 httplib 模塊
- 4.6 context 模塊
- 4.7 toolbox 模塊
- 4.8 config 模塊
- 4.9 i18n 模塊
- 第5章 beego高級編程
- 5.1 進程內監控
- 5.2 API自動化文檔
- 第6章 應用部署
- 6.1 獨立部署
- 6.2 Supervisor部署
- 6.3 Nginx 部署
- 6.4 Apache 部署
- 第7章 第三方庫
- 第8章 應用例子
- 8.1 在線聊天室
- 8.2 短域名服務
- 8.3 Todo列表
- 第9章 FAQ