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的操作和使用相关的内容。在后面的实际项目开发中,我们本节课学习的内容将会得到应用实践的机会。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,617评论 1 49
  • Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$go...
    qfzhangxu阅读 1,115评论 0 1
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,364评论 1 17
  • 2018年第一次游记 有人在年轻的时候嘻嘻哈哈 有人在年轻的时候考了些证 有人在年轻的时候学了很多朵东西 有人在年...
    fly___feel阅读 226评论 0 0
  • 大家好,认识我的人都知道我在群里一般都是沉默寡言的(哈哈,好像也很少人注意到我),可能是性格的原因,...
    Alice20339阅读 234评论 0 0