[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