Beego Session 默认关闭,需显式开启:代码中设 beego.BConfig.WebConfig.Session.SessionOn = true(beego.Run() 前),或配置文件写 sessionon = true;默认 memory 引擎重启丢数据,生产环境应改用 file 或 redis 并正确配置 SessionProvider 和 SessionProviderConfig;推荐直接使用 SetSession/GetSession/DelSession,避免手动管理 sess 生命周期;注意 SessionGCMaxLifetime(服务端过期)与 SessionCookieLifeTime(客户端 cookie 有效期)需一致,且修改 SessionName 会导致旧 cookie 失效。

Beego 的 Session 功能默认是关闭的,必须显式开启才能用;不配置存储引擎或路径时,它会 fallback 到 memory,但进程重启后所有 session 全丢——这在开发调试时没问题,上线前务必改掉。
怎么开启 Session(代码 or 配置文件)
两种方式等效,选一种即可,别同时写,否则容易覆盖:
-
beego.BConfig.WebConfig.Session.SessionOn = true放在main()函数里、beego.Run()之前 - 在
conf/app.conf里加一行:sessionon = true
注意:如果用配置文件方式,Beego 会自动读取并初始化 GlobalSessions;如果用代码方式,也得确保没漏掉 beego.Run() 启动流程,否则 session manager 不会真正启动 GC goroutine。
Session 存储引擎怎么选和配(特别是 file / redis)
默认 memory 引擎只适合单机调试。生产环境必须换:
- 用
file:适合低并发、无集群、但要求重启不丢数据的场景beego.BConfig.WebConfig.Session.SessionProvider = "file"beego.BConfig.WebConfig.Session.SessionProviderConfig = "./.sessions"(路径需存在且可写) - 用
redis:高并发、多实例部署的首选beego.BConfig.WebConfig.Session.SessionProvider = "redis"beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:6379,0,astaxie"(格式:addr,db,password)
注意:SessionProviderConfig 的值不是 JSON,是字符串,不同引擎格式差异大;填错会导致 GlobalSessions == nil,后续调用 SetSession 会 panic。
批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
SetSession / GetSession 怎么安全使用(别碰 sess 对象)
Beego Controller 提供了封装好的三个方法,直接用就行,不用自己管理生命周期:
-
this.SetSession("user_id", 123)—— 值支持基本类型和 struct(需可序列化) -
val := this.GetSession("user_id")—— 返回interface{},务必做类型断言,比如val.(int),否则运行时报panic: interface conversion -
this.DelSession("user_id")—— 只删 key,不影响其他字段
别写 sess := this.StartSession(); defer sess.SessionRelease() 这套——虽然文档写了,但实际容易漏 defer 或提前 return 导致 SessionRelease 没执行,引发 session 数据没写回后端(尤其是 file 或 redis)。
Session 过期和 Cookie 行为怎么控制
两个关键参数常被混淆:
-
SessionGCMaxLifetime(默认 3600):服务端 session 数据过期时间,单位秒,GC goroutine 每次扫描时清理超时项 -
SessionCookieLifeTime(默认 0):浏览器 cookie 的有效期,0 表示“浏览器关闭即失效”,设成 3600 就是 1 小时后 cookie 自动删除
也就是说:即使服务端 session 还没过期,只要 cookie 被浏览器删了,下次请求就拿不到 sid,会新建一个 session——所以线上建议把 SessionCookieLifeTime 设为和 SessionGCMaxLifetime 一致,避免用户“明明没登出却突然要重新登录”。
最易忽略的一点:修改 SessionName(比如设成 "myapp_sid")后,旧 cookie 名(默认 "beegosessionID")就完全失效了,前端不会自动迁移,老用户首次访问会丢失 session——上线前务必同步通知前端清除旧 cookie 或做兼容跳转。

















