BeeGo-Session与框架集成

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]

在配置文件中配置Session信息

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 数据 -- 感觉怪怪的!

前后端分别登陆了一个用户,都保存在一个key里面了
当在前端或后端再登陆一个用户时,就会创建一个新的key
有点像一个 key 里面可以同时保存 gob 里面注册的不同的struct数据,如果有相同的,则会创建一个新的key

引入Redis 存储引擎 ,不引入会报错如下:

由于上面使用的 redis 做存储引擎,需要在入口文件的 init 方法中注册后面需要保存到session里面的数据 sturct

gob 注册相应的 struct

其它存储引擎参考:

官方文档:https://beego.me/docs/mvc/controller/session.md