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
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"))
}

退出登录(session删除)

//session.Delete(session-name)
app.Get("/quite",func(ctx iris.Context){
	session := sess.Start(ctx)
	session.Delete("islogin")
	session.Delete("username")
})

查询

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("账号未登陆")
  }
})

session连接数据库

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

go get github.com/kataras/iris/v12/sessions/sessiondb/[email protected]
//"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)

你可能感兴趣的:(golang,golang,开发语言,后端)