前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >beego操作session

beego操作session

作者头像
hotqin888
发布2018-09-11 14:31:52
1.1K0
发布2018-09-11 14:31:52
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334268

代码语言:javascript
复制
因为学艺不精,用beego一年了,因为升级后发现存cookie不起作用了,只好改session了。
代码语言:javascript
复制
</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()
}
代码语言:javascript
复制
	//(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)检查登录

代码语言:javascript
复制
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)退出登录

代码语言:javascript
复制
	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
	}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档