您的位置:首页 > 编程语言 > Go语言

beego操作session

2016-03-06 15:42 429 查看
因为学艺不精,用beego一年了,因为升级后发现存cookie不起作用了,只好改session了。
</pre><pre name="code" class="plain">import (
"github.com/astaxie/beego"
//(1)导入session包
"github.com/astaxie/beego/session"
)

//(2)建立一个全局session mananger对象
var globalSessions *session.Manager

//(3)在初始化“全局session mananger对象”
func init() {
globalSessions, _ = session.NewManager("memory", `{"cookieName":"gosessionid", "enableSetCookie,omitempty": true, "gclifetime":3600, "maxLifetime": 3600, "secure": false, "sessionIDHashFunc": "sha1", "sessionIDHashKey": "", "cookieLifeTime": 3600, "providerConfig": ""}`)
go globalSessions.GC()
}


//(4)获取当前的请求会话,并返回当前请求会话的对象
sess, _ := globalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
defer sess.SessionRelease(c.Ctx.ResponseWriter)
//(5)根据当前请求对象,设置一个session
<span style="white-space:pre">		</span>sess.Set("uname", user.Username)
<span style="white-space:pre">		</span>sess.Set("pwd", user.Password)
//(6)从session中读取值
// c.Data["Email"] = sess.Get("mySession")
(7)检查登录

func checkAccount(ctx *context.Context) bool {
var user models.User
//(4)获取当前的请求会话,并返回当前请求会话的对象
//但是我还是建议大家采用 SetSession、GetSession、DelSession 三个方法来操作,避免自己在操作的过程中资源没释放的问题
sess, _ := globalSessions.SessionStart(ctx.ResponseWriter, ctx.Request)
defer sess.SessionRelease(ctx.ResponseWriter)
v := sess.Get("uname")
if v == nil {
return false
} else {
user.Username = v.(string)
v = sess.Get("pwd")
user.Password = v.(string) //ck.Value
err := models.ValidateUser(user)
if err == nil {
return true
} else {
return false
}
}


(8)退出登录

isExit := c.Input().Get("exit") == "true"
url1 := c.Input().Get("url") //这里不支持这样的url,http://192.168.9.13/login?url=/topic/add?id=955&mid=3
url2 := c.Input().Get("mid")
var url string
if url2 == "" {
url = url1
} else {
url = url1 + "&mid=" + url2
}

c.Data["Url"] = url
sess, _ := globalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)
defer sess.SessionRelease(c.Ctx.ResponseWriter)
if isExit {
// c.Ctx.SetCookie("uname", "", -1, "/")<span style="font-family: Arial, Helvetica, sans-serif;">//这个不行</span>
// c.Ctx.SetCookie("pwd", "", -1, "/")<span style="font-family: Arial, Helvetica, sans-serif;">//这个不行</span>
// c.DelSession("gosessionid")<span style="font-family: Arial, Helvetica, sans-serif;">//这个不行</span>
// c.DelSession("uname")//这个不行
// c.Destroy/Session()<span style="font-family: Arial, Helvetica, sans-serif;">//这个不行</span>
sess.Delete("uname") //这个可行。
// sess.Flush()//这个不灵
c.Redirect("/", 301)
return
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: