在iris mvc中需先初始化session管理器并配置cookie和expires,再通过mvc.register(sess.start)注入,控制器字段名必须为session且类型为*sessions.session,方可安全调用set/getxxx/delete方法读写会话数据。

在Iris框架的MVC结构中为控制器注入Session对象并正确读写会话数据,是实现用户状态保持的核心操作。若跳过依赖注册直接在控制器字段声明*sessions.Session,运行时会 panic:nil pointer dereference。
初始化Session管理器
在main()函数中创建全局Session实例,必须显式配置Cookie名称和过期时间——不设Expires会导致浏览器关闭后Session立即失效。
sess := sessions.New(sessions.Config{ Cookie: "mysessionid", Expires: 24 * time.Hour })
这一步必须在mvc.New()之前完成,否则后续控制器无法绑定该Session实例。
将Session注入MVC应用
调用mvcApplication.Register()把Session实例注册为依赖项,Iris会在每次请求时自动将其注入到匹配字段的控制器中。
visitApp := mvc.New(app.Party("/"))
visitApp.Register(sess.Start)
【sess.Start必须作为函数传入,不能传sess本身】。传sess会导致绑定失败,控制器中Session字段始终为nil。
在Controller中声明并使用Session字段
定义控制器结构体时,字段名必须为Session(首字母大写),类型为*sessions.Session,且不能带json:等结构体标签。
type VisitController struct {
Session *sessions.Session
StartTime time.Time
}
字段名写成session或MySession都会导致注入失败;加`json:"session"`标签会触发反射绑定异常。
在控制器方法中读写Session数据
① 使用Set()存入任意可序列化值,支持string/int/bool/struct等类型:
func (c *VisitController) PostLogin(ctx iris.Context) {
c.Session.Set("user_id", 123)
c.Session.Set("logged_in", true)
c.Session.Set("profile", map[string]string{"name": "Alice"})
}
② 使用GetXXX()系列方法安全读取,避免类型断言错误:
userID := c.Session.GetInt("user_id") // 返回int,不存在则为0
isLoggedIn := c.Session.GetBoolean("logged_in") // 返回bool,不存在则为false
name := c.Session.GetString("profile.name") // 支持嵌套路径访问
③ 删除键值对用Destroy()清除整个会话,或Delete("key")删单个字段。











