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/boltdb@v12.2.5
//"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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结城明日奈是我老婆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值