本章介绍beego的内置session模块, 通常session实现机制都是在客户端放一个session ID (cookie),然后服务端存储一份session数据与之对应,那么服务端的session数据存储在什么地方,在beego的设计中可以自由配置。
目前session模块支持的常用的存储引擎如下:
- memory
- cookie
- file
- mysql
- redis
提示:用户也可以自定义自己喜欢的存储引擎
1.安装依赖
go get github.com/beego/beego/v2/server/web/session
2.session基本配置
提示:下文提到的配置,在app.conf配置文件中加入面配置,然后重启beego程序即可生效。
打开session,这个配置是必须的,否则beego默认不会开启session
sessionon = true
设置session id的名字,这个通常都是保存在客户端cookie里面
sessionname = "beegosessionID"
设置 Session 过期的时间, 默认3600秒
sessiongcmaxlifetime = 3600
设置session id的过期时间, 因为session id是保存在cookie中的。
SessionCookieLifeTime = 3600
3.session读写例子
下面是在控制器函数中操作session的例子
// 下面是个简单计数器的例子,通过session的count字段累计访问量
func (this *MainController) Get() {
// 读取session数据
v := this.GetSession("count")
if v == nil {
// 写入session数据
this.SetSession("count", int(1))
this.Data["num"] = 0
} else {
// 写入session数据
this.SetSession("count", v.(int)+1)
this.Data["num"] = v.(int)
}
this.TplName = "user/index.html"
}
session 数据的读写函数如下:
- SetSession(name string, value interface{}) - 设置session值
- GetSession(name string) interface{} - 读取session值
- DelSession(name string) - 删除指定session值
- SessionRegenerateID() - 生成新的session id
- DestroySession() - 销毁session
4.配置session的存储引擎
本节介绍Session存储引擎,默认是 memory, 也就是session数据默认保存在运行beego程序的机器内存中,如果是使用默认配置可以跳过本节内容。
下面分别介绍常用的session存储引擎配置方式。
4.1. session数据保存到文件中
# 设置session保存到文件中
sessionprovider = "file"
# session数据保存目录
sessionproviderconfig = "./data/session"
4.2. session数据保存到redis中
将session数据保存到redis中,需要先安装redis驱动,然后在main.go文件中导入redis驱动。
配置:
# 设置session存储引擎
sessionprovider = "redis"
# redis存储引擎配置
# redis配置格式: redis地址,redis连接池最大连接数,redis密码
# redis连接池和redis密码配置,没有保持为空,例子: 127.0.0.1:6379
sessionproviderconfig = "127.0.0.1:6379,1000,123456"
安装redis驱动:
go get github.com/beego/beego/v2/server/web/session/redis
在main.go入口文件,导入redis驱动
import _ "github.com/beego/beego/v2/server/web/session/redis"
4.3. session数据保存到mysql中
将session数据保存到mysql中,需要先安装mysql驱动,然后在main.go文件中导入mysql驱动。
配置:
# 设置session存储引擎
sessionprovider = "mysql"
# mysql存储引擎配置
sessionproviderconfig = "root:123456@tcp(localhost:3306)/tizi365?charset=utf8"
提示:mysql存储引擎配置使用的是mysql dsn格式,如果不熟悉可以参考数据库设置章节。
安装mysql驱动:
go get github.com/go-sql-driver/mysql
在main.go入口文件,导入mysql驱动
_ "github.com/go-sql-driver/mysql"