• go初识iris框架(六) - session使用和控制


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

    Session与Cookiel的区别

    session和cookie的区别:
    ·首先是两者的相同点。sessioncookie两者都是用来存储客户的状态信息的手段。在登录注 册等动作后,可以存储相关账户的状态信息,方便程序后续跟踪及使用
    ·其次是不同点,讨论两者的不同点我们从几个角度来总结。首先是两者的存储位置。Cookie
    存储在客户端浏览器上,方便客户端请求时使用;Session存储的相关信息存储在服务器端,用
    于存储客户端连接的状态信息。
    ·其次,从可以存储的数据类型来看。Cookie仅仅支持存储字符串string一种数据类型Session
    支持int、string、bool等多种数据类型,Session支持的数据类型更全更多。

    示例

    先要安装session库

    go get github.com/kataras/iris/v12/session
    
    • 1
    package main
    
    import (
    	"github.com/kataras/iris/v12"
    	"github.com/kataras/iris/v12/sessions"
    )
    
    func main() {
    	app := iris.New()
    	sessionID := "mySession"
    
    	//1.创建session并进行使用
    	sess := sessions.New(sessions.Config{
    		Cookie: sessionID,
    	})
    
    	app.Get("/", func(ctx iris.Context) {
    		ctx.Text("你好")
    	})
    
    	app.Post("/login", func(ctx iris.Context) {
    		name := ctx.PostValue("name")
    		passwd := ctx.PostValue("pwd")
    
    		if name == "admin" && passwd == "123456" {
    			session := sess.Start(ctx)
    			session.Set("username", name)
    			session.Set("isLogin", true)
    			ctx.JSON(iris.Map{
    				"islogin": session.Get(ISLOGIN),
    				"name":    name,
    				"pwd":     passwd,
    			})
    		} else {
    			session := sess.Start(ctx)
    			session.Set("isLogin", false)
    			ctx.JSON(iris.Map{
    				"islogin": session.Get(ISLOGIN),
    				"name":    name,
    				"pwd":     passwd,
    			})
    		}
    	})
    
    	app.Run(iris.Addr(":8088"))
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    退出登录(session删除)
    //session.Delete(session-name)
    app.Get("/quite",func(ctx iris.Context){
    	session := sess.Start(ctx)
    	session.Delete("islogin")
    	session.Delete("username")
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查询

    app.Get("/query",func(ctx iris.Context){
      session := sess.Start(ctx)
      //判断是否登录
      isLogin,err := session.GetBoolean("islogin")
      if err != nil {
        ctx.WriteString("账号未登录,请先登录")
        return
      }
    
      if isLogin {
        ctx.WriteString("账号已登陆")
      }else{
        ctx.WriteString("账号未登陆")
      }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    session连接数据库

    有些时候后端服务重启维护的时候,用户的信息应该保存下来,我们应该恢复session状态,以前都是保存在本地内存中,需要保存下来就需要用到session数据库(boltdb:键值对的数据库)

    go get github.com/kataras/iris/v12/sessions/sessiondb/boltdb@v12.2.5
    
    • 1
    //"github.com/kataras/iris/v12/sessions/sessiondb/boltdb"
    //session与数据库通讯
    db, err := boltdb.New("sessions.db", 0600)
    if err != nil {
    	panic(err.Error())
    }
    //程序中断时,数据库关闭
    iris.RegisterOnInterrupt(func() {
    	defer db.Close()
    })
    
    sess.UseDatabase(db)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    HTML5期末考核大作业 粉色三八妇女节主题活动html模板 web传统节日网页设计与实现
    hwk1:消息队列实现进程之间通信方式代码,现象
    Go map作为函数参数 (引用传递,修改形参会影响到实参)
    R语言将数据转化为DALEX包期望的格式、使用DALEX包的explain函数对多个h2o算法模型构建解释器进行解释分析、使用验证集数据构建模型解释器
    .NET性能优化-推荐使用Collections.Pooled
    生成式模型和判别式模型
    格式化名称节点,启动Hadoop
    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
    公共Mono模块
    ELK Stack日志采集架构详解
  • 原文地址:https://blog.csdn.net/yasinawolaopo/article/details/132831441