go语言web开发框架_Iris框架讲解(六):Session的使用和控制
在实际的项目开发中,我们会经常有业务场景使用到Session功能。在iris框架中,也为我们提供了方便使用,功能齐全的Session模块。Session模块的源码目录为kataras/iris/sessions包。
Session与Cookie的区别
在学习web开发过程中,我们总会和session和cookie打交道。本节课我们学习sesion相关的知识,因此有必要先通过讲解对比一下session和cookie的区别:
首先是两者的相同点。session和cookie两者都是用来存储客户的状态信息的手段。在登录、注册等动作后,可以存储相关账户的状态信息,方便程序后续跟踪及使用。
其次是不同点,讨论两者的不同点我们从几个角度来总结。首先是两者的存储位置。Cookie是存储在客户端浏览器上,方便客户端请求时使用;Session存储的相关信息存储在服务器端,用于存储客户端连接的状态信息。
其次,从可以存储的数据类型来看。Cookie仅仅支持存储字符串string一种数据类型,Session支持int、string、bool等多种数据类型,Session支持的数据类型更全更多。
Session对象创建
在实际的程序开发中,iris框架中可以非常方便的创建一个新的session对象。如下所示,即是session的创建:
...
sessionID := "mySession"
//session的创建
sess := sessions.New(sessions.Config{
Cookie: sessionID,
})
支持的数据类型
在上文中,我们说过session支持的数据类型要比cookie多,我们来看一下iris框架中的session所支持存储的数据类型:
//String:字符串类型
session.GetString()
//Int:无符号整形 及系列相关单位的同类型
session.GetInt()
//Boolean:布尔值类型
session.GetBoolean()
//Float:单精度数值类型 及系列相关单位的同类型
session.GetFloat()
//interface{}:接口 即任意数据结构类型
session.GetFlash()
上述代码块,即列出了iris框架中所支持存储的数据类型。我们在接下来的本节课程内容中,将会演示如何进行具体使用。
Session的存储和使用
在实际的项目开发中,Session的用法非常普遍。在本节课堂中,我们通过一个模拟用户登录、登出、查询的案例来模拟Session的存储、使用、删除等操作。
具体案例如下:
app.Post("/login", func(context context.Context) {
path := context.Path()
app.Logger().Info(" 请求Path:", path)
userName := context.PostValue("name")
passwd := context.PostValue("pwd")
if userName == "davie" && passwd == "pwd123" {
session := sess.Start(context)
//用户名
session.Set(USERNAME, userName)
//登录状态
session.Set(ISLOGIN, true)
context.WriteString("账户登录成功 ")
} else {
session := sess.Start(context)
session.Set(ISLOGIN, false)
context.WriteString("账户登录失败,请重新尝试")
}
})
...
app.Get("/logout", func(context context.Context) {
path := context.Path()
app.Logger().Info(" 退出登录 Path :", path)
session := sess.Start(context)
//删除session
session.Delete(ISLOGIN)
session.Delete(USERNAME)
context.WriteString("退出登录成功")
})
...
app.Get("/query", func(context context.Context) {
path := context.Path()
app.Logger().Info(" 查询信息 path :", path)
session := sess.Start(context)
isLogin, err := session.GetBoolean(ISLOGIN)
if err != nil {
context.WriteString("账户未登录,请先登录 ")
return
}
if isLogin {
app.Logger().Info(" 账户已登录 ")
context.WriteString("账户已登录")
} else {
app.Logger().Info(" 账户未登录 ")
context.WriteString("账户未登录")
}
})
...
上述的代码中展示了session的使用方法,更多全部的案例代码资料在配套的课程资料中可以查看。
Session与数据库结合使用
除了Session在程序中的使用,Session还可以与数据库绑定使用,用以在停止服务时将用户状态session同步于数据库中,并进行恢复。
db, err := boltdb.New("sessions.db", 0600)
if err != nil {
panic(err.Error())
}
//程序中断时,将数据库关闭
iris.RegisterOnInterrupt(func() {
defer db.Close()
})
//session和db绑定
sess.UseDatabase(db)
本节课中,我们学习了Session的操作和使用相关的内容。在后面的实际项目开发中,我们本节课学习的内容将会得到应用实践的机会。
go语言web开发框架_Iris框架讲解(六):Session的使用和控制的更多相关文章
- go语言web开发框架_Iris框架讲解(五):MVC包使用
在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...
- go语言web开发框架_Iris框架讲解(五)MVC包使用
在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...
- GoWeb开发_Iris框架讲解(一)
Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...
- GoWeb开发_Iris框架讲解(四):Iris框架设置操作
路由组的使用 在实际开发中,我们通常都是按照模块进行开发,同一模块的不同接口url往往是最后的一级url不同,具有相同的前缀url.因此,我们期望在后台开发中,可以按照模块来进行处理我们的请求,对于这 ...
- Python语言Web开发框架web2py
python开发的强大的网络框架web2py,这个框架需要下载和集成. http://www.web2py.com/examples/static/web2py_src.zip
- GoWeb开发_Iris框架讲解(三):路由功能处理方式
Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$goPath}\github.com\kataras\iris\context\conte ...
- GoWeb开发_Iris框架讲解(二):Get、Post、Put等请求及数据返回格式
数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...
- JFinal -基于Java 语言的MVC极速 web 开发框架
JFinal概述 JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再 ...
- Go语言Web框架gwk介绍 1
Go语言Web框架gwk介绍 (一) 今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布 ...
随机推荐
- CDN存储和加速静态文件是什么回事(整理)(CDN是什么)
CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...
- js文件报错Syntax error on token "Invalid Regular Expression Options", no accurate correction
Syntax error on token "Invalid Regular Expression Options", no accurate correction 1.选中报错的 ...
- C++(六)— 输入方式
1.输入包含空格的字符串 使用 getline(cin, str)读取一行字符串,遇到换行符停止:cin>>str,是遇到空格就停止. 实现:输入两个字符,在第一个字符中删除第二个字符中出 ...
- 08 - Django应用第五步
1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...
- 数据库的join查询
假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示: id name id name -- ---- -- ---- 1 ...
- XMPP群聊消息重复,自己收到自己发出的消息,群警告消息如何屏蔽
在XMPP的"groupchat"中,创建群的时候会收到群发的"This room is locked from entry until configuration is ...
- mysql绿色安装
先下载需要的文件: MySQL5.1(绿色).rar 和 MySQL-Front_v5.3(绿色版).rar 都是绿色免安装版 1.解压MySQL Server 5.1.rar到MySQL Serve ...
- 51nod 1250 排列与交换——dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250 仔细思考dp. 第一问,考虑已知 i-1 个数有多少种方案. ...
- docker 容器内服务自启动
centos6/7 有区别先说6 centos6: 方式一:rc.local + 容器内的启动脚本 1.chkconfig docker on #docker开机自启动2.[root@master y ...
- C# 中常用LInq操作
static void Main(string[] args) { , , , , , , }; , , , , , , }; , , , , , , , , , , , }; // 交集 var f ...