暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Golang Web开发之Gin会话控制(二)

一起Go技术 2021-11-14
1897

声明:这是一个系列,系列中,我将为您介绍Gin框架



上一篇中,介绍了gin中cookie的内容。在本文中,我将为您介绍,Gin框架关于会话控制——session相关的内容


Gin Session


1. session是什么

由于 cookie 存在着一些问题,比如不安全明文,有上限存储等各种问题,所以有时候开发中经常使用另一种会话保持技术——session


与 cookie 一样,session 也是在 http 无状态协议的基础上实现的一种对用户状态管理技术,它与 cookie 的区别在于,session 是记录在服务端的,而 cookie 是记录在客户端的。

■ ■■■


2. session怎么工作

当浏览器第一次访问服务器时,服务器创建一个 session 对象(该对象有一个唯一的id,一般称之为 sessionId ),服务器会将 sessionId 以 cookie 的方式发送给浏览器。当浏览器再次访问服务器时,会将 sessionId 发送过来,服务器依据  sessionId 就可以找到对应的 session 对象。
■ ■■■

3. session处理

在 gin 中,可以依赖 gin-contrib/sessions 中间件处理 session。

gin-contrib/sessions 中间件支持的存储引擎有几种:cookie、memstore、redis、memcached、Mongodb。


可以使用命令安装session包:

go get github.com/gin-contrib/sessions

■ ■■■


4. 操作session

通过一个基本的使用案例演示如何操作session,代码如下:
package main


import (
  "github.com/gin-contrib/sessions"
  "github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)


func main() {
r := gin.Default()


  // 创建基于cookie的存储引擎,this is a secret!!!用于加密的密钥
  store := cookie.NewStore([]byte("this is a secret!!!"))


  r.Use(sessions.Sessions("_session", store))


r.GET("/test_session", func(c *gin.Context) {
// 初始化session对象
session := sessions.Default(c)


// 通过session.Get 获取session值
// session 是键值对格式数据,因此需要通过 key 查询数据
if session.Get("name") != "zhangsan" {
// 设置 session 数据
      session.Set("name""zhangsan")


// 保存 session数据
      session.Save()
}


c.JSON(200, gin.H{
"name": session.Get("name"),
})
})


r.Run()
}


现在运行上述代码后,测试结果如下图:



能够看到,会在响应结果的Cookies中出现一条session:


另外,您能够通过session.Delete(key)删除session数据,使用session.Clear(),删除整个session数据。这里不做演示。


■ ■■■



总结


本文主要介绍了什么是session,并简单说明了它的工作原理,另外在Gin中是如何去操作session,并演示了一个操作session的小demo。


后续,我将继续为您介绍Gin的一些其他教程,敬请期待~~。




  end 
👇👇👇👇👇👇

长按二维码关注我们吧


不要错过



因为你的分享、点赞、在看
我足足的精气神儿!





文章转载自一起Go技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论