Go语言 Gin框架处理cookie

1,761 阅读2分钟

cookie通常用于在浏览器中保存一些小数据,例如客户标识、用户非铭感数据。注意别使用cookie保存隐私数据。

gin框架主要通过上下文对象提供的SetCookie和Cookie两个函数操作cookie.

1.设置cookie

后端设置cookie的值。

r.GET("/setCookie", func(c *gin.Context) {
	// 设置cookie
	c.SetCookie("cookie_name", "cookie_value", 3600, "/", "localhost", false, true)
	/*
		name cookie的名称
		value cookie的值
		maxAge int, 单位为秒
		path cookie所在目录
		domain string,域名
		secure 是否智能通过https访问
		httpOnly bool  是否允许通过js获取自己的cookie
	*/
	c.JSON(http.StatusOK, gin.H{
		"message": "set cookie success.",
	})
})

SetCookie函数定义:

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

参数说明:

参数名类型说明
namestringcookie名字
valuestringcookie值
maxAgeint有效时间,单位是秒,MaxAge=0 忽略MaxAge属性,MaxAge<0 相当于删除cookie, 通常可以设置-1代表删除,MaxAge>0 多少秒后cookie失效
pathstringcookie路径
domainstringcookie作用域
secureboolSecure=true,那么这个cookie只能用https协议发送给服务器
httpOnlybool设置HttpOnly=true的cookie不能被js获取到

1set_cookie.png

2.读取cookie

后端通过cookie名称读取cookie的值。

r.GET("/getCookie", func(c *gin.Context) {
	// 读取cookie,根据cookie名读取
	cookie, err := c.Cookie("cookie_name")
	if err != nil {
		// 直接返回cookie值
		c.JSON(http.StatusOK, gin.H{"message": "get cookie fail"})
		return
	}
	c.JSON(http.StatusOK, gin.H{"cookie_name": cookie})
})

2getcookie.png

3.删除cookie

通过将cookie的MaxAge设置为-1, 达到删除cookie的目的。

r.GET("/delCookie", func(c *gin.Context) {
	// 删除cookie, 设置cookie MaxAge设置为-1,表示删除cookie
	c.SetCookie("cookie_name", "cookie_value", -1, "/", "localhost", false, true)
	c.JSON(http.StatusOK, gin.H{
		"message": "delete cookie success.",
	})
})

3delcookie.png

4.完整示例

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	r := gin.Default()
	// 1.设置cookie
	r.GET("/setCookie", func(c *gin.Context) {
		// 设置cookie
		c.SetCookie("cookie_name", "cookie_value", 3600, "/", "localhost", false, true)
		/*
			name cookie的名称
			value cookie的值
			maxAge int, 单位为秒
			path cookie所在目录
			domain string,域名
			secure 是否智能通过https访问
			httpOnly bool  是否允许通过js获取自己的cookie
		*/
		c.JSON(http.StatusOK, gin.H{
			"message": "set cookie success.",
		})
	})
	// 2.获取cookie
	r.GET("/getCookie", func(c *gin.Context) {
		// 读取cookie,根据cookie名读取
		cookie, err := c.Cookie("cookie_name")
		if err != nil {
			// 直接返回cookie值
			c.JSON(http.StatusOK, gin.H{"message": "get cookie fail"})
			return
		}
		c.JSON(http.StatusOK, gin.H{"cookie_name": cookie})
	})
	// 3.删除cookie
	r.GET("/delCookie", func(c *gin.Context) {
		// 删除cookie, 设置cookie MaxAge设置为-1,表示删除cookie
		c.SetCookie("cookie_name", "cookie_value", -1, "/", "localhost", false, true)
		c.JSON(http.StatusOK, gin.H{
			"message": "delete cookie success.",
		})
	})

	r.Run(":8080")
}