方法列表

Session操作相关的方法:
godoc.org/github.com/johng-cn/gf/g/net/ghttp#Session

  1. func (s *Session) BatchSet(m map[string]interface{})
  2. func (s *Session) Contains(k string) bool
  3. func (s *Session) Data() map[string]interface{}
  4. func (s *Session) Get(k string) interface{}
  5. func (s *Session) GetBool(k string) bool
  6. func (s *Session) GetFloat32(k string) float32
  7. func (s *Session) GetFloat64(k string) float64
  8. func (s *Session) GetInt(k string) int
  9. func (s *Session) GetString(k string) string
  10. func (s *Session) GetUint(k string) uint
  11. func (s *Session) Id() string
  12. func (s *Session) Remove(k string)
  13. func (s *Session) Set(k string, v interface{})
  14. func (s *Session) UpdateExpire()
  15. func (s *Server) GetSessionIdName() string
  16. func (s *Server) GetSessionMaxAge() int
  17. func (s *Server) SetSessionIdName(name string)
  18. func (s *Server) SetSessionMaxAge(maxage int)

任何时候都可以通过*ghttp.Request获取Session对象,因为CookieSession都是和请求会话相关,因此都属于Request的成员对象,并对外公开。gf框架的Session是存放在内存中的,因此处理效率非常高,默认过期时间是600秒

此外,需要说明的是,Session的操作是支持并发安全的,这也是框架在对Session的设计上不采用直接以map的形式操作数据的原因。

在任何时候,我们都可以通过ghttp.Request对象来修改和获取Session的全局相关属性。

使用示例

  1. package main
  2. import (
  3. "gitee.com/johng/gf/g"
  4. "gitee.com/johng/gf/g/net/ghttp"
  5. )
  6. func main() {
  7. s := g.Server()
  8. s.BindHandler("/session", func(r *ghttp.Request) {
  9. id := r.Session.GetInt("id")
  10. r.Session.Set("id", id + 1)
  11. r.Response.Write("id:", id)
  12. })
  13. s.SetPort(8199)
  14. s.Run()
  15. }

启动main.go,访问http://127.0.0.1:8199/session,刷新几次页面,可以看到页面输出的id值在不断递增。

由于对于Web开发者来讲,Session都已经是非常熟悉的组件了,相关API也非常简单,这里便不再赘述。

Session与Redis整合

gf框架提供了SESSION模块及gredis模块,但是考虑到模块的低耦合性,因此默认情况下并没有做直接的整合处理,有需要的开发者可以按照以下思路便可方便地将sessionredis做整合:

  1. 阅读【事件回调/中间件】章节,及【Cookie】章节;
  2. 我们将会用到Cookie对象的SessionId方法,用于获取客户端提交的session id,依靠这个id从redis获取/设置数据;
  3. 注册ghttp.HOOK_BEFORE_SERVE回调函数,在接口服务开始,根据获取到的session idredis中查询用户session数据,随后通过SESSION.Sets方法将从redis中获取的数据设置到SESSION中;
  4. 注册ghttp.HOOK_AFTER_SERVE回调函数,在接口服务结束后,通过SESSION.Data方法获取内存中的session数据,并将该数据保存到redis中;