[TOC]
# 特別注意
*這個文檔是session獨立模塊,即你單獨拿這個模塊應用于其他應用中,如果你想在beego中使用session,請查看文檔[session 控制](../mvc/controller/session.md)*
# session 介紹
session 模塊是用來存儲客戶端用戶,session 模塊目前只支持 cookie 方式的請求,如果客戶端不支持 cookie,那么就無法使用該模塊。
session 模塊參考了 `database/sql` 的引擎寫法,采用了一個接口,多個實現的方式。目前實現了 memory、 file、Redis 和 MySQL 四種存儲引擎。
通過下面的方式安裝 session:
go get github.com/astaxie/beego/session
## session 使用
首先你必須導入包:
import (
"github.com/astaxie/beego/session"
)
然后你初始化一個全局的變量用來存儲 session 控制器:
var globalSessions *session.Manager
接著在你的入口函數中初始化數據:
func init() {
globalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid", "enableSetCookie,omitempty": true, "gclifetime":3600, "maxLifetime": 3600, "secure": false, "sessionIDHashFunc": "sha1", "sessionIDHashKey": "", "cookieLifeTime": 3600, "providerConfig": ""}`)
go globalSessions.GC()
}
NewManager 函數的參數的函數如下所示
1. 引擎名字,可以是 memory、file、mysql 或 redis。
2. 一個JSON字符串,傳入Manager的配置信息
1. cookieName: 客戶端存儲 cookie 的名字。
2. enableSetCookie,omitempty: 是否開啟SetCookie,omitempty這個設置
3. gclifetime: 觸發 GC 的時間。
4. maxLifetime: 服務器端存儲的數據的過期時間
5. secure: 是否開啟 HTTPS,在 cookie 設置的時候有 cookie.Secure 設置。
6. sessionIDHashFunc: sessionID 生產的函數,默認是 sha1 算法。
7. sessionIDHashKey: hash 算法中的 key。
8. cookieLifeTime: 客戶端存儲的 cookie 的時間,默認值是 0,即瀏覽器生命周期。
9. providerConfig: 配置信息,根據不同的引擎設置不同的配置信息,詳細的配置請看下面的引擎設置
最后我們的業務邏輯處理函數中可以這樣調用:
func login(w http.ResponseWriter, r *http.Request) {
sess, _ := globalSessions.SessionStart(w, r)
defer sess.SessionRelease(w)
username := sess.Get("username")
if r.Method == "GET" {
t, _ := template.ParseFiles("login.gtpl")
t.Execute(w, nil)
} else {
sess.Set("username", r.Form["username"])
}
}
globalSessions 有多個函數如下所示:
- SessionStart 根據當前請求返回 session 對象
- SessionDestroy 銷毀當前 session 對象
- SessionRegenerateId 重新生成 sessionID
- GetActiveSession 獲取當前活躍的 session 用戶
- SetHashFunc 設置 sessionID 生成的函數
- SetSecure 設置是否開啟 cookie 的 Secure 設置
返回的 session 對象是一個 Interface,包含下面的方法
* Set(key, value interface{}) error
* Get(key interface{}) interface{}
* Delete(key interface{}) error
* SessionID() string
* SessionRelease()
* Flush() error
## 引擎設置
上面已經展示了 memory 的設置,接下來我們看一下其他三種引擎的設置方式:
- mysql
其他參數一樣,只是第四個參數配置設置如下所示,詳細的配置請參考 [mysql](https://github.com/go-sql-driver/mysql#dsn-data-source-name):
username:password@protocol(address)/dbname?param=value
- redis
配置文件信息如下所示,表示鏈接的地址,連接池,訪問密碼,沒有保持為空:
127.0.0.1:6379,100,astaxie
- file
配置文件如下所示,表示需要保存的目錄,默認是兩級目錄新建文件,例如 sessionID 是 `xsnkjklkjjkh27hjh78908`,那么目錄文件應該是 `./tmp/x/s/xsnkjklkjjkh27hjh78908`:
./tmp
## 如何創建自己的引擎
在開發應用中,你可能需要實現自己的 session 引擎,beego 的這個 session 模塊設計的時候就是采用了 interface,所以你可以根據接口實現任意的引擎,例如 memcache 的引擎。
type SessionStore interface {
Set(key, value interface{}) error //set session value
Get(key interface{}) interface{} //get session value
Delete(key interface{}) error //delete session value
SessionID() string //back current sessionID
SessionRelease() // release the resource & save data to provider
Flush() error //delete all data
}
type Provider interface {
SessionInit(maxlifetime int64, savePath string) error
SessionRead(sid string) (SessionStore, error)
SessionExist(sid string) bool
SessionRegenerate(oldsid, sid string) (SessionStore, error)
SessionDestroy(sid string) error
SessionAll() int //get all active session
SessionGC()
}
最后需要注冊自己寫的引擎:
func init() {
Register("own", ownadaper)
}
- 寫在前面的話
- 第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