版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334268
因为学艺不精,用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
}