3. Session的使用和控制

在实际的项目开发中,我们会经常有业务场景使用到Session功能。在iris框架中,也为我们提供了方便使用,功能齐全的Session模块。Session模块的源码目录为kataras/iris/sessions包。

3.1 Session与Cookie的区别

在学习web开发过程中,我们总会和session和cookie打交道。本节课我们学习sesion相关的知识,因此有必要先通过讲解对比一下session和cookie的区别:

  • 首先是两者的相同点。session和cookie两者都是用来存储客户的状态信息的手段。在登录、注册等动作后,可以存储相关账户的状态信息,方便程序后续跟踪及使用。

  • 其次是不同点,讨论两者的不同点我们从几个角度来总结。首先是两者的存储位置。Cookie是存储在客户端浏览器上,方便客户端请求时使用;Session存储的相关信息存储在服务器端,用于存储客户端连接的状态信息。

  • 其次,从可以存储的数据类型来看。Cookie仅仅支持存储字符串string一种数据类型,Session支持int、string、bool等多种数据类型,Session支持的数据类型更全更多。

3.2 Session对象创建

在实际的程序开发中,iris框架中可以非常方便的创建一个新的session对象。如下所示,即是session的创建:

  1. sessionID := "mySession"
  2. //session的创建
  3. sess := sessions.New(sessions.Config{
  4. Cookie: sessionID,
  5. })

3.3 支持的数据类型

在上文中,我们说过session支持的数据类型要比cookie多,我们来看一下iris框架中的session所支持存储的数据类型:

  1. //String:字符串类型
  2. session.GetString()
  3. //Int:无符号整形 及系列相关单位的同类型
  4. session.GetInt()
  5. //Boolean:布尔值类型
  6. session.GetBoolean()
  7. //Float:单精度数值类型 及系列相关单位的同类型
  8. session.GetFloat()
  9. //interface{}:接口 即任意数据结构类型
  10. session.GetFlash()

上述代码块,即列出了iris框架中所支持存储的数据类型。我们在接下来的本节课程内容中,将会演示如何进行具体使用。

3.4 Session的使用

  1. session := sess.Start(ctx)
  2. session.Set("key", "helloworld")

4. 实战项目资源导入和项目框架搭建

从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发。

4.1 实战项目框架搭建

我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台。平台中可以管理用户、商品、商铺等相关的信息,平台可以实时展示用户、商品等相关监测数据的变化情况。通过此项目,旨在能够将Iris框架相关的知识得到巩固和练习。 如下是项目框架搭建后的说明:

  • config:项目配置文件及读取配置文件的相关功能

  • controller:控制器目录、项目各个模块的控制器及业务逻辑处理的所在目录

  • datasource:实现mysql连接和操作、封装操作mysql数据库的目录。

  • model:数据实体目录,主要是项目中各业务模块的实体对象的定义

  • service:服务层目录。用于各个模块的基础功能接口定义及实现,是各个模块的数据层。

  • static:配置项目的静态资源目录。

  • util:提供通用的方法封装。

  • main.go:项目程序主入口

  • config.json:项目配置文件。

5. 代码

  1. package main
  2.  
  3. import (
  4. "github.com/kataras/iris/sessions"
  5. "github.com/kataras/iris"
  6. "github.com/kataras/iris/context"
  7. "github.com/kataras/iris/sessions/sessiondb/boltdb"
  8. )
  9.  
  10. var (
  11. USERNAME = "userName"
  12. ISLOGIN = "isLogin"
  13. )
  14.  
  15. //Session的使用和控制
  16. func main() {
  17.  
  18. app := iris.New()
  19.  
  20. sessionID := "mySession"
  21.  
  22. //1.创建session并进行使用
  23. sess := sessions.New(sessions.Config{
  24. Cookie: sessionID,
  25. })
  26.  
  27. //用户登录功能
  28. app.Post("/login", func(context context.Context) {
  29. path := context.Path()
  30. app.Logger().Info(" 请求Path:", path)
  31. userName := context.PostValue("name")
  32. passwd := context.PostValue("pwd")
  33.  
  34. if userName == "davie" && passwd == "pwd123" {
  35. session := sess.Start(context)
  36.  
  37. //用户名
  38. session.Set(USERNAME, userName)
  39. //登录状态
  40. session.Set(ISLOGIN, true)
  41.  
  42. context.WriteString("账户登录成功 ")
  43.  
  44. } else {
  45. session := sess.Start(context)
  46. session.Set(ISLOGIN, false)
  47. context.WriteString("账户登录失败,请重新尝试")
  48. }
  49. })
  50.  
  51. //用户退出登录功能
  52. app.Get("/logout", func(context context.Context) {
  53. path := context.Path()
  54. app.Logger().Info(" 退出登录 Path :", path)
  55. session := sess.Start(context)
  56. //删除session
  57. session.Delete(ISLOGIN)
  58. session.Delete(USERNAME)
  59. context.WriteString("退出登录成功")
  60. })
  61.  
  62. app.Get("/query", func(context context.Context) {
  63. path := context.Path()
  64. app.Logger().Info(" 查询信息 path :", path)
  65. session := sess.Start(context)
  66.  
  67. isLogin, err := session.GetBoolean(ISLOGIN)
  68. if err != nil {
  69. context.WriteString("账户未登录,请先登录 ")
  70. return
  71. }
  72.  
  73. if isLogin {
  74. app.Logger().Info(" 账户已登录 ")
  75. context.WriteString("账户已登录")
  76. } else {
  77. app.Logger().Info(" 账户未登录 ")
  78. context.WriteString("账户未登录")
  79. }
  80.  
  81. })
  82.  
  83. //2.session和db绑定使用
  84. //boltdb键值对的输数据库
  85. db, err := boltdb.New("sessions.db", 0600) //0600操作权限
  86. if err != nil {
  87. panic(err.Error())
  88. }
  89.  
  90. //程序中断时,将数据库关闭
  91. iris.RegisterOnInterrupt(func() {
  92. defer db.Close()
  93. })
  94.  
  95. //session和db绑定
  96. sess.UseDatabase(db)
  97.  
  98. app.Run(iris.Addr(":8009"), iris.WithoutServerError(iris.ErrServerClosed))
  99. }

  

Iris_cookie和session的更多相关文章

  1. session实现购物车

    为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...

  2. Asp.net Core中使用Session

    前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...

  3. 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)

           首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...

  4. 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  5. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  6. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  7. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  8. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...

  9. 修改session垃圾回收几率

    <?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...

随机推荐

  1. Java_Day8

    Java learning_Day8 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> 提 ...

  2. 关于java静态存储类的一个知识点

    今天在写代码的时候产生了一个很奇怪的问题:静态类里的数据在其他类中更改之后,是否会保存 然后就动手试验了一下,结果是 ·在更改数据的类中,输出数据都是更够以后的数据 ·在先执行更改数据的类之后执行第二 ...

  3. Linux虚拟文件系统–VFS简介

    http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html 导读 Linux中可以支持多种文件系统,而且支持各种 ...

  4. 异常处理_python

    一.异常处理格式: name=[1,2]data={}try: name[3] data['name']except (KeyError,IndexError) as e : #捕捉指定的几个错误类型 ...

  5. Hive0.13_函数

    Hive函数大全 一.关系运算: 1. 等值比较: = 2. 等值比较:<=> 3. 不等值比较: <>和!= 4. 小于比较: < 5. 小于等于比较: <= 6 ...

  6. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  7. Python里的Flask开发环境的搭建

    在已经安装好了Python后,我这里用的是Python3.5,准备进一步学习Flask框架,下面记录搭建Flask环境 这里使用了虚拟环境,在虚拟环境里,最小化的安装Flask. 参考步骤: 1.首先 ...

  8. JS图片轮换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. C++类this指针为空时的几个误区

    代码: class test{ public: static void f1(){cout<<y<<endl;} void f2(){cout<<y<< ...

  10. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...