Files
build-web-application-with-…/14.2.md
2013-01-16 00:54:46 +08:00

103 lines
3.3 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 14.2 Session支持
第六章的时候我们介绍过如何在Go语言中使用session也实现了一个sessionMangerbeego基于sessionManager实现了框架方便的处理session功能。
## session集成
beego中主要有如下这些全局变量来控制session处理
//related to session
SessionOn bool // 是否开启session模块默认不开启
SessionProvider string // session后端提供处理模块默认是sessionManager支持的memory
SessionName string // 客户端保存的cookies的名称
SessionGCMaxLifetime int64 // cookies有效期
GlobalSessions *session.Manager //全局session控制器
当然上面这些变量需要初始化值以及如何配合配置文件设置来设置这些值:
if ar, err := AppConfig.Bool("sessionon"); err != nil {
SessionOn = false
} else {
SessionOn = ar
}
if ar := AppConfig.String("sessionprovider"); ar == "" {
SessionProvider = "memory"
} else {
SessionProvider = ar
}
if ar := AppConfig.String("sessionname"); ar == "" {
SessionName = "beegosessionID"
} else {
SessionName = ar
}
if ar, err := AppConfig.Int("sessiongcmaxlifetime"); err != nil && ar != 0 {
int64val, _ := strconv.ParseInt(strconv.Itoa(ar), 10, 64)
SessionGCMaxLifetime = int64val
} else {
SessionGCMaxLifetime = 3600
}
在beego.Run函数中增加如下代码
if SessionOn {
GlobalSessions, _ = session.NewManager(SessionProvider, SessionName, SessionGCMaxLifetime)
go GlobalSessions.GC()
}
这样如果只要SessionOn设置为true那么就会默认开启session功能。独立开一个goroutine来处理session。
为了方便我们在我们的Controller中方便的使用session我们在`beego.Controller`中提供了如下方法:
func (c *Controller) StartSession() (sess session.Session) {
sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
return
}
## session使用
通过上面的代码我们可以看到beego框架很方便的就继承了session功能那么我们在项目中如何使用呢
首先我们需要在我们的main入口中开启session
beego.SessionOn = true
然后我们就可以在我们的控制器的相应方法中如下所示的使用session了
func (this *MainController) Get() {
var intcount int
sess := this.StartSession()
count := sess.Get("count")
if count == nil {
intcount = 0
} else {
intcount = count.(int)
}
intcount = intcount + 1
sess.Set("count", intcount)
this.Data["Username"] = "astaxie"
this.Data["Email"] = "astaxie@gmail.com"
this.Data["Count"] = intcount
this.TplNames = "index.tpl"
}
上面的代码展示了如何在我们自己的控制逻辑中使用session主要分两个步骤
1. 获取session对象
//获取对象,类似PHP中的session_start()
sess := this.StartSession()
2. 使用session进行一般的session值操作
//获取session值类似PHP中的$_SESSION["count"]
sess.Get("count")
//设置session值
sess.Set("count", intcount)
通过上面的例子我们看到在基于beego框架开发的应用中使用session相当方便基本上和PHP中使用类似。
## links
* [目录](<preface.md>)
* 上一节: [静态文件支持](<14.1.md>)
* 下一节: [表单及验证支持](<14.3.md>)