beego——session控制
beego内置了session模块,目前session模块支持的后端引擎包括memory、cookie、file、mysql、redis、couchbase、memcache、postgres,
用户也可以根据相应的interface实现自己的引擎。
beego中使用相当方便,只要在main入口函数中设置如下:
beego.BConfig.WebConfig.Session.SessionOn = true
或者通过配置文件配置如下:
sessionon = true
beego中通过如下方式操作session。
func (this *MainController) Get() {
v := this.GetSession("asta")
if v == nil {
this.SetSession("asta", int(1))
this.Data["num"] = 0
} else {
this.SetSession("asta", v.(int)+1)
this.Data["num"] = v.(int)
}
this.TplName = "index.tpl"
}
session有几个方便的方法:
- SetSession(name string, value interface{}) 设置session的值
- GetSession(name string) interface{} 获取session的值
- DelSession(name string) 删除
- SessionRegenerateID()
- DestroySession()
session操作主要有设置session、获取session、删除session。
当然你可以通过下面的方式控制这些逻辑:
sess:=this.StartSession()
defer sess.SessionRelease()
sessi对象具有如下方法:
sess.Set()
sess.Get()
sess.Delete()
sess.SessionID()
sess.Flush()
但是建议使用SetSession、GetSession、DelSession三个方法来操作,避免自己在操作的过程中资源没释放的问题。
关于Session模块使用中的一些参数设置:
(1)beego.BConfig.WebConfig.Session.SessionOn
设置是否开启Session,默认是false,配置文件对应的参数名:sessionon
(2)beego.BConfig.WebConfig.Session.SessionProvider
设置Session的引擎(session存储方式),默认是memory,目前支持还有file、mysql、redis等,配置文件对应的参数名:sessionprovider
(3)beego.BConfig.WebConfig.Session.SessionName
设置cookies的名字,Session默认是保存在用户浏览器cookies里面的,默认名是beegosessionID,配置文件对应的参数名是:sessionname
(4)beego.BConfig.WebConfig.Session.SessionGCMaxLifetime
设置Session过期时间,默认值是3600秒,配置文件对应的参数:sessiongcmaxlifetime。
(5)beego.BConfig.WebConfig.Session.SessionProviderConfig
设置对应file、mysql、redis引擎的保存路径或者链接地址,默认值是空,配置文件对应参数:sessionproviderconfig。
(6)beego.BConfig.WebConfig.Session.SessionHashFunc
默认值为sha1,采用sha1加密算法生产sessionid
(7)beego.BConfig.WebConfig.Session.SessionHashKey
默认的key是beegoserversessionkey,建议用户使用的时候修改该参数。
(8)beego.BConfig.WebConfig.Session.SessionCookieLifeTime
设置cookie的过期时间,cookie是用来存储保存在客户端的数据。
从beego1.1.3版本开始移除了第三方依赖库。也就是如果你想使用mysql、redis、couchbase、memcache、postgres这些引擎,那么你首先需要安装。
go get -u github.com/astaxie/beego/session/mysql
然后在你的main函数中引入该库,和数据库的驱动引入是一样的:
import _ "github.com/astaxie/beego/session/mysql"
当SessionProvider为file SessionProviderConfig是指保存文件的目录,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider="file"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "./tmp"
当SessionProvider为mysql时,SessionProviderConfig是链接地址,采用go-sql-driver,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider = "mysql"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "username:password@protocol(address)/dbname?param=value"
需要特别注意的是,在使用 mysql 存储 session 信息的时候,需要事先在 mysql 创建表,建表语句如下:
CREATE TABLE `session` (
`session_key` char(64) NOT NULL,
`session_data` blob,
`session_expiry` int(11) unsigned NOT NULL,
PRIMARY KEY (`session_key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
当 SessionProvider 为 redis 时,SessionProviderConfig 是 redis 的链接地址,采用了 redigo,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider = "redis"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:6379"
当 SessionProvider 为 memcache 时,SessionProviderConfig 是 memcache 的链接地址,采用了 memcache,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider = "memcache"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "127.0.0.1:7080"
当 SessionProvider 为 postgres 时,SessionProviderConfig 是 postgres 的链接地址,采用了 postgres,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider = "postgresql"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full"
当 SessionProvider 为 couchbase 时,SessionProviderConfig 是 couchbase 的链接地址,采用了 couchbase,如下所示:
beego.BConfig.WebConfig.Session.SessionProvider = "couchbase"
beego.BConfig.WebConfig.Session.SessionProviderConfig = "http://bucketname:bucketpass@myserver:8091"
需要注意的是,因为 session 内部采用了 gob 来注册存储的对象,例如 struct,
所以如果你采用了非 memory 的引擎,请自己在 main.go 的 init 里面注册需要保存的这些结构体,不然会引起应用重启之后出现无法解析的错误
beego——session控制的更多相关文章
- Beego 学习笔记14:Session控制
Session控制 1> Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2> Beego框架内置了 session 模块,目前 ...
- session 控制
session 控制 beego 内置了 session 模块,目前 session 模块支持的后端引擎包括 memory.cookie.file.mysql.redis.couchbase.memc ...
- beego——session模块
session介绍 session是一个独立的模块,即你可以那这个模块应用于其它Go程序中. session模块是用来存储客户端用户,session目前只支持cookie方式的请求,如果客户端不支持c ...
- [Java][Spring][scurity]同步session控制,防止一个用户多次登录
[Spring][scurity]同步session控制.防止一个用户多次登录 假设你希望限制单个用户仅仅能登录到你的程序一次,Spring Security通过加入以下简单的部分支持这个功能. 1. ...
- 如何通过session控制单点登录
web服务器为每一个浏览器实例对应一个session.这个session有自己的一个独立id,这个id保存在浏览器的cookie中(这个cookie貌似随着这个浏览器实例的关闭而清除),访问web服务 ...
- session 控制单点登录
在我登录成功之后,我会 session.setAttribute("user", userMap);//设置session 所以就写了一个监听器来控制登录的. package or ...
- 利用缓存实现APP端与服务器接口交互的Session控制
与传统B/S模式的Web系统不同,移动端APP与服务器之间的接口交互一般是C/S模式,这种情况下如果涉及到用户登录的话,就不能像Web系统那样依赖于Web容器来管理Session了,因为APP每发一次 ...
- 创建Cookie,简单模拟登录,记录登录名,购物车记录先前添加内容,session控制登录
工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站, ...
- session控制登入权限
<?php session_start(); if(empty($_SESSION["uid"]))//判断SESSION是不是为空 { header("locat ...
随机推荐
- root权限NPM全局安装(-g)仍会权限不够,认识下参数 --unsafe-perm
环境说明 ganiks@ganiks-ubuntu-trusty-64:/ganiks/parse-server$ npm -v 6.5.0 ganiks@ganiks-ubuntu-trusty-6 ...
- 目录视图摘要视图订阅 基于Extjs开发不允许为空的文本框提示及相应的验证错误提示(转)
原文地址:http://blog.csdn.net/kunoy/article/details/8007585 本文主要解决问题: 1.区分哪些文本框不允许为空,很多网站都采用在文本框后加*号,ext ...
- CSS之webkit-scrollbar例子
基于webkit的浏览器现在也可以自定义其样式: ::-webkit-scrollbar { /* 1 */ } ::-webkit-scrollbar-button ...
- PAT001 一元多项式求导
题目: 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格 ...
- 什么是 end-to-end 神经网络?——知乎解答
什么是 end-to-end 神经网络? https://www.zhihu.com/question/51435499 解答1 张旭 像机器一样学习,像人一样生活 YJango 等 端到端指的是 ...
- 嵌入式驱动开发之dsp fpga通信接口---spi串行外围接口、emif sram接口
-----------------------------------------author:pkf ------------------------------------------------ ...
- 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1596 一开始交了个貌似正确的dp,wa了. 我只考虑了儿子覆盖的情况,没有考虑父亲QAQ 那么我们要 ...
- ASP.NET动态增加HTML元素的方法实例小结
本文实例讲述了ASP.NET动态增加HTML元素的方法.分享给大家供大家参考,具体如下: 在使用asp.net进行web开发的时候页面中的<head></head>中的信息可以 ...
- 苹果手机输入中文不会触发onkeyup事件
今天同事的项目有这个问题,用我的安卓手机输入中文是ok的,但是苹果手机就不行 使用keyup事件检测文本框内容: $('#keyup_i').bind('keyup', function(){ ...
- http协议详解(1)
HTTP协议报文格式 接下来我们看看HTTP协议(Hypertext Transfer Protocol――超文本传输协议)浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...