beego——session控制
beego内置了session模块,目前session模块支持的后端引擎包括memory、cookie、file、mysql、redis、couchbase、memcache、postgres,
用户也可以根据相应的interface实现自己的引擎。
beego中使用相当方便,只要在main入口函数中设置如下:
1 | beego.BConfig.WebConfig.Session.SessionOn = true |
或者通过配置文件配置如下:
1 | sessionon = true |
beego中通过如下方式操作session。
1 2 3 4 5 6 7 8 9 10 11 | func (this *MainController) Get() { v := <strong>this.GetSession</strong>( "asta" ) if v == nil { <strong>this.SetSession</strong>( "asta" , int(1)) this.Data[ "num" ] = 0 } else { <strong>this.SetSession</strong>( "asta" , v.(int)+1) this.Data[ "num" ] = v.(int) } this.TplName = "index.tpl" } |
session有几个方便的方法:
- SetSession(name string, value interface{}) 设置session的值
- GetSession(name string) interface{} 获取session的值
- DelSession(name string) 删除
- SessionRegenerateID()
- DestroySession()
session操作主要有设置session、获取session、删除session。
当然你可以通过下面的方式控制这些逻辑:
1 2 | sess:=this.StartSession() defer sess.SessionRelease() |
sessi对象具有如下方法:
1 2 3 4 5 | sess.Set() sess.Get() sess.Delete() sess.SessionID() sess.Flush() |
但是建议使用SetSession、GetSession、DelSession三个方法来操作,避免自己在操作的过程中资源没释放的问题。
关于Session模块使用中的一些参数设置:
(1)beego.BConfig.WebConfig.Session.SessionOn
设置是否开启Session,默认是false,配置文件对应的参数名:sessionon
(2)beego.BConfig.WebConfig.Session.SessionProvider
设置Session的引擎(session存储方式),默认是memory,目前支持还有file、mysql、redis等,配置文件对应的参数名:sessionprovider
(3)beego.BConfig.WebConfig.Session.SessionName
设置cookies的名字,Session默认是保存在用户浏览器cookies里面的,默认名是beegosessionID,配置文件对应的参数名是:sessionname
(4)beego.BConfig.WebConfig.Session.SessionGCMaxLifetime
设置Session过期时间,默认值是3600秒,配置文件对应的参数:sessiongcmaxlifetime。
(5)beego.BConfig.WebConfig.Session.SessionProviderConfig
设置对应file、mysql、redis引擎的保存路径或者链接地址,默认值是空,配置文件对应参数:sessionproviderconfig。
(6)beego.BConfig.WebConfig.Session.SessionHashFunc
默认值为sha1,采用sha1加密算法生产sessionid
(7)beego.BConfig.WebConfig.Session.SessionHashKey
默认的key是beegoserversessionkey,建议用户使用的时候修改该参数。
(8)beego.BConfig.WebConfig.Session.SessionCookieLifeTime
设置cookie的过期时间,cookie是用来存储保存在客户端的数据。
从beego1.1.3版本开始移除了第三方依赖库。也就是如果你想使用mysql、redis、couchbase、memcache、postgres这些引擎,那么你首先需要安装。
1 | go get -u github.com/astaxie/beego/session/mysql |
然后在你的main函数中引入该库,和数据库的驱动引入是一样的:
1 | import _ "github.com/astaxie/beego/session/mysql" |
当SessionProvider为file SessionProviderConfig是指保存文件的目录,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider= "file" beego.BConfig.WebConfig.Session.SessionProviderConfig = "./tmp" |
当SessionProvider为mysql时,SessionProviderConfig是链接地址,采用go-sql-driver,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider = "mysql" beego.BConfig.WebConfig.Session.SessionProviderConfig = "username:password@protocol(address)/dbname?param=value" |
需要特别注意的是,在使用 mysql 存储 session 信息的时候,需要事先在 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;
当 SessionProvider 为 redis 时,SessionProviderConfig 是 redis 的链接地址,采用了 redigo,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider = "redis" beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:6379" |
当 SessionProvider 为 memcache 时,SessionProviderConfig 是 memcache 的链接地址,采用了 memcache,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider = "memcache" beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:7080" |
当 SessionProvider 为 postgres 时,SessionProviderConfig 是 postgres 的链接地址,采用了 postgres,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider = "postgresql" beego.BConfig.WebConfig.Session.SessionProviderConfig = "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full" |
当 SessionProvider 为 couchbase 时,SessionProviderConfig 是 couchbase 的链接地址,采用了 couchbase,如下所示:
1 2 | beego.BConfig.WebConfig.Session.SessionProvider = "couchbase" beego.BConfig.WebConfig.Session.SessionProviderConfig = "http://bucketname:bucketpass@myserver:8091" |
需要注意的是,因为 session 内部采用了 gob 来注册存储的对象,例如 struct,
所以如果你采用了非 memory 的引擎,请自己在 main.go 的 init 里面注册需要保存的这些结构体,不然会引起应用重启之后出现无法解析的错误
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2017-12-15 Redis重大版本
2017-12-15 MySQL——存储引擎
2017-12-15 Redis使用场景
2017-12-15 查看一张表的信息