beego框架 session处理

session 对象位于服务器端,用来存储特定用户会话所需的属性及配置信息,当用户在应用程序的 Web 页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在。

Beego 框架内置了 session 模块,目前 session 模块支持的后端引擎包括 memory、cookie、file、mysql、redis、couchbase、memcache、postgres,用户也可以根据相应的 interface 实现自己的引擎。

 

1. 开启 session

beego 默认是关闭 session的,如果想要使用 session 需要在配置文件或程序中设置。

在配置文件中 codebao/conf/app.conf 中开启 session:

sessionon=true

在程序开启 session,通常在 codebao/main.go 中开启:

beego.BConfig.WebConfig.Session.SessionOn = true

在配置文件中,还可以设置 session id 的名字,这个通常都是保存在客户端 cookie 里面:

sessionname = "beegosessionID"

设置 Session 过期的时间, 默认3600秒

sessiongcmaxlifetime = 3600

设置session id的过期时间, 因为session id是保存在 cookie 中的。

SessionCookieLifeTime = 3600

 

2. session 读写

session 数据的操作函数如下:

  • SetSession(name string, value interface{}) - 设置session值
  • GetSession(name string) interface{} - 读取session值
  • DelSession(name string) - 删除指定session值
  • SessionRegenerateID() - 生成新的session id
  • DestroySession() - 销毁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"
}

 

3. 配置 session 的存储引擎

本节介绍 Session 存储引擎,默认是 memory, 也就是 session 数据默认保存在运行 beego 程序的机器内存中,如果是使用默认配置可以跳过本节内容。

下面分别介绍常用的 session 存储引擎配置方式。

1) session 数据保存到文件

# 设置session保存到文件中
sessionprovider = "file"

# session数据保存目录
sessionproviderconfig = "./data/session"

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"

3) session数据保存到 mysql

将 session 数据保存到 mysql 中,需要先安装 mysql 驱动,然后在 main.go 文件中导入 mysql 驱动。

# 设置 session 存储引擎
sessionprovider = "mysql"

# mysql 存储引擎配置
sessionproviderconfig = "root:123456@tcp(localhost:3306)/codebaoku?charset=utf8"

安装 mysql 驱动:

go get github.com/go-sql-driver/mysql

在main.go入口文件,导入mysql驱动

_ "github.com/go-sql-driver/mysql"

beego设计了一个专门处理日志的库,方便我在项目中打印各种错误日志,调试日志,使用日志库需要先安装日志库。安装日志库:go get github.com/beego/beego/v2/core/logs