session集成

beego中主要有以下的全局变量来控制session处理:

//related to session
SessionOn            bool   // 是否开启session模块,默认不开启
SessionProvider      string // session后端提供处理模块,默认是sessionManager支持的memory
SessionName          string // 客户端保存的cookies的名称
SessionGCMaxLifetime int64  // cookies有效期GlobalSessions *session.Manager //全局session控制器

当然上面这些变量需要初始化值,也可以按照下面的代码来配合配置文件以设置这些值:

if ar, err := AppConfig.Bool("sessionon"); err != nil {SessionOn = false
} else {SessionOn = ar
}
if ar := AppConfig.String("sessionprovider"); ar == "" {SessionProvider = "memory"
} else {SessionProvider = ar
}
if ar := AppConfig.String("sessionname"); ar == "" {SessionName = "beegosessionID"
} else {SessionName = ar
}
if ar, err := AppConfig.Int("sessiongcmaxlifetime"); err != nil && ar != 0 {int64val, _ := strconv.ParseInt(strconv.Itoa(ar), 10, 64)SessionGCMaxLifetime = int64val
} else {SessionGCMaxLifetime = 3600
}

在beego.Run函数中增加如下代码:

if SessionOn {GlobalSessions, _ = session.NewManager(SessionProvider, SessionName, SessionGCMaxLifetime)go GlobalSessions.GC()
}

这样只要SessionOn设置为true,那么就会默认开启session功能,独立开一个goroutine来处理session。

为了方便我们在自定义Controller中快速使用session,作者在beego.Controller中提供了如下方法:

func (c *Controller) StartSession() (sess session.Session) {sess = GlobalSessions.SessionStart(c.Ctx.ResponseWriter, c.Ctx.Request)return
}

session使用

通过上面的代码我们可以看到,beego框架简单地继承了session功能,那么在项目中如何使用呢?

首先我们需要在应用的main入口处开启session:

beego.SessionOn = true

然后我们就可以在控制器的相应方法中如下所示的使用session了:

func (this *MainController) Get() {var intcount intsess := this.StartSession()count := sess.Get("count")if count == nil {intcount = 0} else {intcount = count.(int)}intcount = intcount + 1sess.Set("count", intcount)this.Data["Username"] = "astaxie"this.Data["Email"] = "astaxie@gmail.com"this.Data["Count"] = intcountthis.TplNames = "index.tpl"
}

上面的代码展示了如何在控制逻辑中使用session,主要分两个步骤:

  1. 获取session对象

    //获取对象,类似PHP中的session_start()
    sess := this.StartSession()
    
  2. 使用session进行一般的session值操作

    //获取session值,类似PHP中的$_SESSION["count"]
    sess.Get("count")//设置session值
    sess.Set("count", intcount)

golang中的Session支持相关推荐

  1. Golang中函数不支持重载

    Golang中函数不支持重载

  2. golang中的pprof支持

    专注后台开发相关技术,广度深度并存,干货情怀同在. 微信搜索[盼盼编程]关注这个不一样的程序员. ❤️强烈推荐人工智能学习网站❤️ Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具,在两 ...

  3. Golang中支持可变参数

    Golang中支持可变参数 (如果你希望函数带有可变数量的参数) package main import "fmt" //定义一个函数,函数的参数为:可变参数 ... 参数的数量可 ...

  4. Golang 中使用 JSON 的一些小技巧 陶文 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:,string 就可以支持了

    Golang 中使用 JSON 的一些小技巧 陶文 3 个月前 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" ...

  5. Golang中Buffer高效拼接字符串以及自定义线程安全Buffer

    本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章.觉得好的话,顺手分享到朋友圈吧,感谢支持. Go中可以使用"+ ...

  6. Tomcat5集群中的SESSION复制详解

    Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...

  7. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  8. ashx页面中context.Session[xxx]获取不到值的解决办法

    1.在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString( ...

  9. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

最新文章

  1. 实现库函数strcpy
  2. 本地缓存防止缓存击穿_防止缓存爆炸的快速提示
  3. 理解numpy数组中的各个维度代表的具体意思(axis)
  4. ORB-SLAM3 代码解读
  5. js控制的动画,显示隐藏(元素,动画,显示隐藏)
  6. mac切换网卡|IP
  7. 大数据日志分析Hadoop项目实战
  8. java捕鱼增值版游戏下载_捕鱼游戏 java
  9. 揭秘手机游戏厂商怎么赚钱的。
  10. [PyQt5]基本控件24 - 时间日期编辑框QDateTimeEdit
  11. 全选、删除、撤回、剪切、复制、粘贴、永久性删除、新建文件夹、启动任务管理器、退出的快捷键
  12. Visual Studio2019下载安装
  13. 夜曲编程python_夜曲编程app免费版下载-百词斩夜曲编程下载v1.0.0安卓版-西西软件下载...
  14. hive olap 数据仓库_数据仓库:OLTP与OLAP查询
  15. 运算符、操作符、if switch语句婚礼纪主页
  16. 思科系统命令行输入快捷键
  17. 前端导出zip格式压缩包
  18. 华为hybrid,pvid,lap
  19. sanic 应用(2)
  20. 在线转换,直接将dwg转换成jpg

热门文章

  1. 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback )
  2. mysql-笔记-数据类型
  3. 2017-2018-1 20155207 《信息安全系统设计基础》第四周学习总结
  4. [Phonegap+Sencha Touch] 移动开发18 Sencha Touch项目通过phonegap打包后的程序名字的问题...
  5. 查看android keystore 别名
  6. SQL Server:APPLY表运算符
  7. 默认子进程与父进程属于同一个进程组,所以注意对接受到的信号的处理方式
  8. Matlab Robotic Toolbox V9.10工具箱(六):puma560 动力学建模与仿真
  9. 每3位新码农中就有2个是单身?来自31000人的调查报告显示……
  10. 浙江、江苏推动企业上云 瞄准人工智能的工业效益