• Gin中的Cookie和Session的用法


    Gin中的Cookie和Session的用法

    介绍

    • cookiesession 是 Web 开发中常用的两种技术,主要用于跟踪用户的状态信息。

    Cookie

    • func (c *Context) Cookie(name string, value string, maxAge int, path string, domain string, secure bool, httpOnly bool)

    • name:Cookie的名称

    • value:Cookie的值

    • maxAge:Cookie的最大生存时间,单位秒。如果为-1,则会产生一个会话Cookie,不设定过期时间。

    • path:Cookie路径,默认是’/’

    • domain:Cookie域名。默认空,代表当前访问的域名。

    • secure: 是否通过HTTPS传输Cookie

    • httpOnly: 是否只能服务器修改,HTTP请求中不会显示在Cookie头中。

    • 在 HTTP 协议中,每个请求都是无状态的,也就是说服务器无法知道当前的请求和之前的请求是来自同一个用户。Cookie 是一种在客户端存储用户数据的技术,可以帮助服务器识别用户

    • 当用户第一次访问服务器时,服务器可以生成一个唯一的 ID 并将其存储在一个 Cookie 中,然后将这个 Cookie 发送给客户端。客户端在收到 Cookie 后,会将其存储起来,并在每次发送请求时都将这个 Cookie 附加到请求中。这样,服务器就可以通过检查 Cookie 来识别用户。

    代码演示
    • Gin中Cookie的方法只有两个
      • 获取cookie: c.Cookie()
      • 设置cookie:c.SetCookie()
    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    
    	//使用cookie
    	r.GET("/cookie", CookieHandle)
    
    	r.Run()
    }
    
    func CookieHandle(c *gin.Context) {
    	userID := "userID"
    	//获取指定的cookie
    	cookie, err := c.Cookie(userID)
    	//没有就创建cookie
    	if err != nil {
    		c.SetCookie(userID, "0", 60*60, "/", "", true, false)
    	}
    	//获取成功就打印cookie
    	c.JSON(http.StatusOK, gin.H{
    		"status": cookie,
    	})
    }
    
    • 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

    Session

    • Go语言中的gin想要用Session需要引入第三方库

      • 拉取:go get github.com/gin-contrib/sessions
      • 导包:import "github.com/gin-contrib/sessions"
      • 具体详情:https://github.com/gin-contrib/sessions
    • 虽然 Cookie 可以用来识别用户,但是它并不能存储大量的用户数据。这是因为 Cookie 的大小有限制,而且每个 Cookie 都会在每次请求时发送给服务器,如果 Cookie 太大,会导致网络延迟。

    • Session 是另一种用于存储用户数据的技术。与 Cookie 不同,Session 数据存储在服务器端。当用户第一次访问服务器时,服务器会创建一个新的 Session,并生成一个与之关联的唯一 ID。这个 ID 会被存储在一个 Cookie 中,并发送给客户端。这样,当客户端再次发送请求时,服务器就可以通过 Session ID 来查找对应的 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()
    	store := cookie.NewStore([]byte("secret"))
    	r.Use(sessions.Sessions("mysession", store))
    
    	r.GET("/hello", func(c *gin.Context) {
    		session := sessions.Default(c)
    
    		if session.Get("hello") != "world" {
    			session.Set("hello", "world")
    			session.Save()
    		}
    
    		c.JSON(200, gin.H{"hello": session.Get("hello")})
    	})
    	r.Run(":8000")
    }
    
    • 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
  • 相关阅读:
    连阿里P8都赞不绝口的“分布式架构原理设计笔记”到底有多牛
    LeetCode刷题---罗马数字转整数
    SQL注入
    kafka消息重复消费解决方案
    2022年全网最细虚拟机 Vmware15 安装 Windows
    域名服务:域名迁移
    网站入门:Flask用法讲解
    微信小程序开发系列(三十五)·自定义组件的属性properties
    JDY-16 蓝牙4.2模块串口测试方法
    SSM萌宠宠物网店毕业设计源码011042
  • 原文地址:https://blog.csdn.net/JUIU9527/article/details/132718169