09.Session
# 01.session介绍
# 1.1 session概念
session 是另一种记录客户状态的机制
不同的是 Cookie 保存在客户端浏览器中,而 session保存在服务器上。
Session 的工作流程
- 当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个 session 对象
- 生成一个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端
- 浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)
# 1.2 beego中的session
- beego 内置了 session 模块,目前 session 模块支持的后端引擎包括
memory、cookie、file、mysql、redis、couchbase、memcache、postgres
- 用户也可以根据相应的 interface 实现自己的引擎。
- beego 中使用 session 相当方便,只要在 main 入口函数中设置如下
beego.BConfig.WebConfig.Session.SessionOn = true
1
- 或者通过配置文件配置如下
sessionon = true
1
# 02.Session 的使用
# 2.1 配置session
conf\app.conf
# 开启session
sessionon = true
# 设置 cookies 的名字,默认名是beegosessionID
SessionName="itying"
# session过期时间:1000s
sessiongcmaxlifetime=1000
# 默认的 key 是 beegoserversessionkey
SessionHashKey="mybeegosession"
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.2 设置session
func (c *UserController) UsersSetSession() {
c.SetSession("username", "张三")
c.Ctx.WriteString("UsersSetSession")
}
1
2
3
4
2
3
4
# 2.3 获取session
func (c *UserController) UsersGetSession() {
username := c.GetSession("username")
fmt.Println(username) // 张三
c.Ctx.WriteString("UsersGetSession")
}
1
2
3
4
5
2
3
4
5
# 03.session存储到Redis
- 如果我们的程序部署到了多台服务器,这个时候把 session 保存到服务器就没法实现 session的共享
- 如果要实现 session 的共享,我们可以把 session 保存到数据库里面
- 可以选择mysql、redis、couchbase、memcache、postgres 这些引擎
# 3.1 安装依赖库
go get -u github.com/astaxie/beego/session/redis
1
# 3.2 配置redis远程连接
root@dev:~# vim /etc/redis/redis.conf
bind 0.0.0.0
protected-mode no
root@dev:~# systemctl restart redis
1
2
3
4
2
3
4
# 3.3 main.go配置
package main
import (
_ "github.com/astaxie/beego/session/redis"
)
func main() {
beego.BConfig.WebConfig.Session.SessionProvider = "redis"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "192.168.56.100:6379"
beego.Run()
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 注:此时session就会存储到redis中
# 04.session存储到MySQL
# 4.1 安装依赖库
go get -u github.com/astaxie/beego/session/mysql
1
# 3.2 mysql 创建表
CREATE TABLE `session` (
`session_key` char(64) NOT NULL,
`session_data` blob,
`session_expiry` int(11) unsigned NOT NULL,
PRIMARY KEY (`session_key`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3.3 main.go配置
package main
import (
_ "github.com/astaxie/beego/session/mysql"
)
func main() {
beego.BConfig.WebConfig.Session.SessionProvider = "mysql"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "username:password@protocol(address)/dbname?param=value"
beego.Run()
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注:此时session就会存储到mysql中
上次更新: 2024/3/13 15:35:10