beego 的 Session 是可以独立出来做为一个单独的模块使用的,参考官网地址: https://beego.me/docs/module/session.md 要与框架结合的方式区分
默认使用的存储引擎为: memory,还支持的存储引擎为: mysql、files、memcache、redis等
需要注意:Session 使用 Golang 的 gob 来序列化数据,如果使用非 memory 的存储引擎,需要使用 gob.Register() 方法注册相应的存储数据对象,否则程序直接各种崩溃
一般在项目中是与beego框架一起使用的,下面介绍使用方法,beego内置了session模块,只需要通过配置项就可以开启与配置:
配置说明 | 配置文件 | 代码中基于[beego.BConfig.WebConfig] |
开启 | sessionon = true | .Session.SessionOn = true |
存储引擎 | sessionprovider | .Session.SessionProvider |
Session名字 | sessionname | .Session.SessionName |
Session过期时间 | sessiongcmaxlifetime | .Session.SessionGCMaxLifetime |
ID 生成方式[sha1] | .Session.SessionHashFunc | |
Session Key | .Session.SessionHashKey | |
Cookie过期时间 | .Session.SessionCookieLifeTime | |
存储引擎的配置信息 | sessionproviderconfig | .Session.SessionProviderConfig |
开启Session之后,就可以使用了:
路由中使用:
c.Input.Session("AdminModal")
在控制器中,使用:
c.GetSession(name string) interface{}
c.SetSession(name string, value interfalce{})
c.DelSession(name string)
c.SessionRegenerateID()
c.DestroySession()
默认框架会自动进去Session的初始化与保存,也可以手动调用如下两个方法进行操作:
sess:=c.StartSession() # 开启Session
defer sess.SessionRelease() # 保存Session信息
实例操作-使用 redis 存储 session数据:
注意:
1. 如果配置出错的话,会使用 memory存储数据
2. redis 有三种:单机[redis]、集群[redis_cluster]、哨兵[redis_sentinel]
Redis 存储引擎说明,内部使用redigo实现链接redis操作:
sessionprovider = redis
sessionproviderconfig = 192.168.100.101:6379,100,ysp_198910
# 使用逗号[,]分隔:
# 1: 地址与端口;
# 2:链接池大小,默认100;
# 3:密码,没有密码,放空;
# 4:DB-Number,默认0号;
# 5:链接空闲超时多久之后关闭,默认0表示不关闭
Tips:
项目使用 /admin 来区分前端还是后台,在使用 session的时候,保存在 redis 里面的 key 会是一个,然后里面会保存两个端的 session 数据 -- 感觉怪怪的!
引入Redis 存储引擎 ,不引入会报错如下:
由于上面使用的 redis 做存储引擎,需要在入口文件的 init 方法中注册后面需要保存到session里面的数据 sturct
其它存储引擎参考: