一架梯子,一头程序猿,仰望星空!

beego session处理


本章介绍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"