在实际的项目开发中,我们会经常有业务场景使用到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的使用和控制的更多相关文章

  1. go语言web开发框架_Iris框架讲解(五):MVC包使用

    在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...

  2. go语言web开发框架_Iris框架讲解(五)MVC包使用

    在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发. iris框架支持请求数据.模型.持久数据分层处理,并支持各层级模块代码绑定执行. MVC即:model ...

  3. GoWeb开发_Iris框架讲解(一)

    Golang介绍 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软 ...

  4. GoWeb开发_Iris框架讲解(四):Iris框架设置操作

    路由组的使用 在实际开发中,我们通常都是按照模块进行开发,同一模块的不同接口url往往是最后的一级url不同,具有相同的前缀url.因此,我们期望在后台开发中,可以按照模块来进行处理我们的请求,对于这 ...

  5. Python语言Web开发框架web2py

    python开发的强大的网络框架web2py,这个框架需要下载和集成. http://www.web2py.com/examples/static/web2py_src.zip

  6. GoWeb开发_Iris框架讲解(三):路由功能处理方式

    Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$goPath}\github.com\kataras\iris\context\conte ...

  7. GoWeb开发_Iris框架讲解(二):Get、Post、Put等请求及数据返回格式

    数据请求方式的分类 所有的项目中使用的请求都遵循HTTP协议标准,HTTP协议经过了1.0和1.1两个版本的发展. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP ...

  8. JFinal -基于Java 语言的MVC极速 web 开发框架

    JFinal概述 JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再 ...

  9. Go语言Web框架gwk介绍 1

    Go语言Web框架gwk介绍 (一)   今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布 ...

随机推荐

  1. JavaUtil_07_HttpUtil_使用Hutool 封装的 HttpUtil

    二.参考资料 1.[Hutool]Hutool工具类之Http工具——HttpUtil

  2. codeforces 633A A. Ebony and Ivory(暴力)

    A. Ebony and Ivory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. yahoo的30条优化规则

    1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速 ...

  4. 表达式(exp)

    题目大意 给定一个逻辑表达式,求每一个数满足$\in[1,n]$的使的表达式为真的方案数. 题解 题目限制较奇怪且数据范围较小,所以可以考虑直接暴力. 考虑枚举每一个变量一共出现了$k$种数值,再枚举 ...

  5. 在oracle中,select语句查询字段中非纯数字值

    最近,将原来的数字符字段转换为数字时,总报错误:无效数字. 如何找出其中哪些是非数字字符的记录?比较麻烦的事.下面是用Oracle DB自带的函数translate可以找出来的 1.创建测试表 Cre ...

  6. Android的各国语言的缩写

    语言包在android工程中的对应关系: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en ...

  7. cs2008中头文件交叉编译的问题

    使用全局变量 使用基类指针定义在头文件中,在实际使用中强制转型为需要的指针,当然应该也可以存为空指针.

  8. Poj 2533 Longest Ordered Subsequence(LIS)

    一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...

  9. NorthSJ项目零碎知识点

    1 div显示纵向滚动条: <div style="overflow-y:auto;overflow-x:hidden;"></div> 2 FineUI的 ...

  10. js中this

    首先声明,我是小白,以下只是自己的简单理解. 先看下面的代码: (function () { console.log(this); })(); 毫无疑虑,输出的是window. 在看下面代码: (fu ...