session 控制
session 控制
beego 内置了 session 模块,目前 session 模块支持的后端引擎包括 memory、cookie、file、mysql、redis、couchbase、memcache、postgres,用户也可以根据相应的 interface 实现自己的引擎。
beego 中使用 session 相当方便,只要在 main 入口函数中设置如下:
beego.BConfig.WebConfig.Session.SessionOn = true
或者通过配置文件配置如下:
sessionon = true
通过这种方式就可以开启 session,如何使用 session,请看下面的例子:
func (this *MainController) Get() {
v := this.GetSession("asta")
if v == nil {
this.SetSession("asta", int())
this.Data["num"] = 0
} else {
this.SetSession("asta", v.(int)+1)// v.(int) 就是把v转化成int
this.Data["num"] = v.(int)
}
this.TplName = "index.tpl"
}
session 有几个方便的方法:
- SetSession(name string, value interface{}) //通过struct 可以实现interface,struct可以是任何对象,对象包括属性和方法
- GetSession(name string) interface{} //就是返回值是一个对象
- DelSession(name string)
- SessionRegenerateID()//重新生成Id
- DestroySession()
session 操作主要有设置 session、获取 session、删除 session。
当然你可以通过下面的方式自己控制这些逻辑:
sess:=this.StartSession()
defer sess.SessionRelease()// 通过recover回复panic抛出的异常
sess 对象具有如下方法:
- sess.Set()
- sess.Get()
- sess.Delete()
- sess.SessionID()
- sess.Flush()
但是我还是建议大家采用 SetSession、GetSession、DelSession 三个方法来操作,避免自己在操作的过程中资源没释放的问题。
关于 Session 模块使用中的一些参数设置:
beego.BConfig.WebConfig.Session.SessionOn
设置是否开启 Session,默认是 false,配置文件对应的参数名:sessionon。
beego.BConfig.WebConfig.Session.SessionProvider
设置 Session 的引擎,默认是 memory,目前支持还有 file、mysql、redis 等,配置文件对应的参数名:sessionprovider。
beego.BConfig.WebConfig.Session.SessionName
设置 cookies 的名字,Session 默认是保存在用户的浏览器 cookies 里面的,默认名是 beegosessionID,配置文件对应的参数名是:sessionname。
beego.BConfig.WebConfig.Session.SessionGCMaxLifetime
设置 Session 过期的时间,默认值是 3600 秒,配置文件对应的参数:sessiongcmaxlifetime。
beego.BConfig.WebConfig.Session.SessionProviderConfig
设置对应 file、mysql、redis 引擎的保存路径或者链接地址,默认值是空,配置文件对应的参数:sessionproviderconfig。
beego.BConfig.WebConfig.Session.SessionHashFunc
默认值为 sha1,采用 sha1 加密算法生产 sessionid
beego.BConfig.WebConfig.Session.SessionHashKey
默认的 key 是 beegoserversessionkey,建议用户使用的时候修改该参数
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"
//例如 "user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true"
需要特别注意的是,在使用 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 里面注册需要保存的这些结构体,不然会引起应用重启之后出现无法解析的错误
session 控制的更多相关文章
- [Java][Spring][scurity]同步session控制,防止一个用户多次登录
[Spring][scurity]同步session控制.防止一个用户多次登录 假设你希望限制单个用户仅仅能登录到你的程序一次,Spring Security通过加入以下简单的部分支持这个功能. 1. ...
- Beego 学习笔记14:Session控制
Session控制 1> Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2> Beego框架内置了 session 模块,目前 ...
- 如何通过session控制单点登录
web服务器为每一个浏览器实例对应一个session.这个session有自己的一个独立id,这个id保存在浏览器的cookie中(这个cookie貌似随着这个浏览器实例的关闭而清除),访问web服务 ...
- session 控制单点登录
在我登录成功之后,我会 session.setAttribute("user", userMap);//设置session 所以就写了一个监听器来控制登录的. package or ...
- beego——session控制
beego内置了session模块,目前session模块支持的后端引擎包括memory.cookie.file.mysql.redis.couchbase.memcache.postgres, 用户 ...
- 利用缓存实现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 ...
- spring security控制session
spring security控制session本文给你描述在spring security中如何控制http session.包括session超时.启用并发session以及其他高级安全配置. 创 ...
随机推荐
- 用java编写代码实现关机
public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); try { runtime.exec( ...
- FFMPEG学习----使用SDL播放PCM数据
参考雷神的代码: /** * 最简单的SDL2播放音频的例子(SDL2播放PCM) * Simplest Audio Play SDL2 (SDL2 play PCM) * * 本程序使用SDL2播放 ...
- mplayer使用心得[转]
一直在用mplayer,其他的播放器很少用.以下是我使用过程中的一些心得. 注意,下面用的路径都是在我的电脑上的路径,使用时请不要照抄!应该换成你的电脑上的正确路径. 一.首先还是讲安装方面的问题 ...
- Codeforces 1087B Div Times Mod(数学+暴力)
题意: 求(x div k) * (x mod k) = n的最小解x,保证有解 1<=n<=1e6, k<=1000,1s 思路: 注意到k的范围是1e3, 1<=x mod ...
- 研究微信红包分配算法之Golang版
今天来看一下红包的分配,参考几年前流传的微信红包分配算法,今天用Golang实现一版,并测试验证结果. 微信红包的随机算法是怎样实现的?https://www.zhihu.com/question/2 ...
- 1 深入Web请求过程
1.1 B/S网络架构概述 B/S 网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,与大多数传统C/S互联网应用程 序采用的长连接的交互模式不同,HTTP采用无状态的短连接 ...
- Java中类的关系
在java里类的关系大致分为三种, 1.继承(a is b):继承extends,实现implement 2.包含(a has b):组合>聚合>关联.关系亲密度越来越小,一个类在另一个类 ...
- 幸存者偏差Survivorship Bias
"最不符合逻辑的地方,一定埋藏着最深刻的逻辑."——余秋雨<行者无疆> 为什么要说幸存者偏差? 因为2018年全国II卷的描述即为典型的“幸存者偏差”,且这一例子被引入 ...
- 浏览器中的 .Net Core —— Blazor WebAssembly 初体验
前言 在两年多以前就听闻 Blazor 框架,是 .Net 之父的业余实验性项目,其目的是探索 .Net 与 WebAssembly 的兼容性和应用前景.现在这个项目已经正式成为 Asp.Net Co ...
- JS用map做接口数据映射
· 接口做数据映射的好处:前端页面自定义的字段不需要和后端字段相同,后端修改字段前端不受影响. · 从接口得到数据 res: let r = res.map(item => { return { ...