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 里面注册需要保存的这些结构体,不然会引起应用重启之后出现无法解析的错误

最新文章

  1. mysql基础类型知识总结
  2. mysql注入研究
  3. C中字符串的几种定义方法及说明
  4. NSProgress
  5. iOS UITableView的分割线短15像素,移动到最左边的方法(iOS8)
  6. Linux系统启动流程及grub重建(1)
  7. SqlServer中存储过程中将Exec的执行结果赋值给变量输出
  8. Leetcode:convert_sorted_array_to_binary_search_tree
  9. Java数据结构和算法(十二)——2-3-4树
  10. springMvc+swagger整合例子
  11. 安卓系统广播暴露设备信息-Android System Broadcasts Expose Device Information
  12. AJAX注册
  13. Django之时间的设置
  14. Google Chrome 中安装 PostMan 扩展
  15. 审计系统---堡垒机项目之strace追踪ssh
  16. JAVA的初始化顺序:
  17. b2BuoyancyController 使用浮力
  18. windows 64位下 Octave 不能画图的解决办法
  19. Eclipse *的安装(图文详解)
  20. 0422数学口袋精灵bug发现

热门文章

  1. 【原创】jpgraph中文乱码问题的解决
  2. Linux平台使用Freetds连接SQL Server服务器,兼容PHP和Laravel
  3. android启动界面
  4. ASP.NET动态添加控件一例
  5. C++ 检查Windows服务运行状态
  6. 【转】CStdioFile UNICODE编译 英文系统下读取中文汉字乱码解决
  7. Json对象与Json字符串互转(4种转换方式) jquery 以及 js 的方式
  8. C#中单例的双重锁定模式
  9. sql 存储过程,最简单的添加和修改
  10. POJ 3150 Cellular Automaton(矩阵快速幂)