在我们进行一些业务的时候,由于http是无状态的协议,我们需要session和cookie来保持用户的状态。在gin框架中,有一个很好的整合了session的库:gin-contrib / sessions。

更多样例可看github:

https://github.com/gin-contrib/sessions

在这里谈谈如何简单的使用这个库。
我一开始也不是很熟悉这个库,直接在代码中使用了存储。

func(a *AdminLoginController)AdminLogin(c *gin.Context){i := &dto.AdminLoginInput{}if err := i.Binding(c);err != nil{public.ResponseErrorWithMsg(public.CodeServeBusy,c,err.Error())return}err, db := sys_init.GetGormConn("default")if err != nil{public.ResponseError(public.CodeServeBusy,c)return}admin, err := service.AdminLogin(db, i)if err != nil{public.ResponseError(public.CodeUserNotExist,c)return}s := &AdminSession{Id:        admin.Id,Username:  admin.UserName,LoginTime: time.Now(),}sJson, err := json.Marshal(s)if err != nil{public.ResponseError(public.CodeInvalidAuth,c)return}//使用库,但是报错:Key "github.com/gin-gonic/contrib/sessions" does not existsession := sessions.Default(c)session.Set(public.AdminSessionInfoKet,string(sJson))session.Save()out := dto.AdminLoginOutput{Token: admin.UserName}public.ResponseSuccess(c,out)
}

结果报错:Key “github.com/gin-gonic/contrib/sessions” does not exist
通过debug,我发现是在Default这一步出错。下面进去Default看一下吧。

这个DefaultKey是什么?

不就是我们上面报的错嘛,似乎是因为gin框架在一开始初始化的时候,没有将这个key和对应的val,set到context中。
那我们得考虑,我们是不是应该use某个中间件,让Handler帮我们做这个事情。

再看下面这个方法。
他正好返回了一个Handler,以一种中间件的形式,为我们set了这个session,以DefaultKey。
那么看看他的参数,他需要一个name,一个store。name好说,应该就是session存取的名字。我们来看看store。

支持cookie,redis等实现类。实际上我们想用什么存就用什么存只要实现了他的接口就好。
现在所有问题都解决了。我们只要在注册gin的核心的时候带上这些代码即可。

 store, _ := sessions.NewRedisStore(10,"tcp","localhost:6379","abc123456"[]byte("secret"))engine := gin.New()engine.Use(sessions.session("mysession",store))

下面看看效果吧。
我们set了一个结构体,结构如下:

type AdminSession struct {Id             int         `json:"id"`Username     string      `json:"username"`LoginTime  time.Time   `json:"login_time"`
}

set的代码:

session := sessions.Default(c)session.Set(public.AdminSessionInfoKey,string(sJson))//不要忘记savesession.Save()

对应在redis:

今天就分享到这里!希望和你们共同进步!

从一个error来认识gin-contrib / sessions。相关推荐

  1. Gin+Gorm+sessions 搭建 golang web项目

    Gin是用Go(Golang)编写的HTTP web框架.它具有类似Martini的API,但性能比Martini快40倍 Gorm,Golang 出色的ORM库 sessions,具有多后端支持的用 ...

  2. [Go实战]个人第一个go样例,gin+gorm

    最近从java转go了 自己没事手写个样例 1.注意事项 1.安装go goland git 2.下载以下依赖 go get -u github.com/jinzhu/gorm go get -u g ...

  3. go build 无文件_Go之Gin+Vue开发一个线上外卖应用

    我们将开始使用Gin框架开发一个api项目,我们起名为:云餐厅.如同饿了么,美团外卖等生活服务类应用一样,云餐厅是一个线上的外卖应用,应用的用户可以在线浏览商家,商品并下单. 该项目分为客户端和服务端 ...

  4. 利用Django框架简单设计一个登陆页面

    这里写自定义目录标题 1.创建project django-admin startproject "你项目的名字" 2.创建app python manage.py startap ...

  5. django2.1.7从0开始搭建一个个人博客网站第5天

    技术引用:uuid UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分.其目的, ...

  6. 【Django快速开发实战】(1~29)使用Django创建一个基础应用:职位管理系统

    1.总体描述 1.1产品需求: 1.2职位管理系统-建模 1.3 Django项目代码结构 新增recruitment项目 django-admin startproject recruitment ...

  7. Vue + Django + PaddleOCR 实现一个在线OCR 识别网站,一键上传快速识别

    大家好,我是小张~ 之前写过一篇博文介绍了一款OCR 识别库,识别精度能达到商用级别,并且支持多语言识别,使用详情请参考文章:文本OCR,这个Python库识别效果不输于商用!, 除了PaddleOC ...

  8. 实战|使用 Python 开发一个在线聊天室

    「来源: |Python爬虫与数据挖掘 ID:crawler_python」 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 云想衣裳花想容,春风拂槛露 ...

  9. 实战 | 使用 Python 开发一个在线聊天室

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 云想衣裳花想容,春风拂槛露华浓. ...

最新文章

  1. PaaS模式创新:实现应用可移植性
  2. 网格员计算机基本操作,网格交易总结系列(一)基本操作篇
  3. C# Programming Language学习笔记(三)
  4. python为什么从0开始_为什么大多数编程语言中,索引都是从0开始
  5. Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)
  6. Android插件化原理解析——广播的管理
  7. Spring Beans 初始化流程分析
  8. 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc
  9. 位运算实现一些小算法
  10. 【转载保存】java静态方法继承与保存的问题
  11. Dubbo-go 服务代理模型
  12. ddmmyy日期格式是多少_如何在Excel 2013/2016/2019中将mmddyyyy文本转换为普通日期格式...
  13. Pytorch的一些损失函数
  14. 学计算机自考商务英语本科好吗,自考本科商务英语专业真的难吗
  15. Java设计模式pdf
  16. powerbuilder防止反编译: pbkiller无法解析的部分公布
  17. linux命令行听歌,谁说linux命令行不能听歌?今天就给你们介绍一款神器
  18. QT文本文档之新建文本
  19. 测量string变量长度函数_测量字符串长度的函数
  20. VMware破解虚拟机内存cpu最大限制

热门文章

  1. 可转债纯债溢价率转股溢价率计算方式
  2. 高精度算r的n次方 问题 H: 乾隆巡江南
  3. SQL学习之insert into select语句
  4. 最新链接分享给微信好友和微信朋友圈带图标和摘要的方法
  5. oracle 升级 32升级64 utlirp,oracle11g 32bit 升级至64bit
  6. Android学习系列(四)AS gradle3.0+ so库的生成及使用
  7. 删除套餐(关联表的删除操作,批量删除,单个删除)
  8. 区块链共识笔记 --- POW 难度计算(ethereum)
  9. smali语言详解之类的声明
  10. 社交网站用户的10大变态心理