Golang gin Cookie的使用

Cookie介绍


  • HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出
  • Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思
  • Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求
  • Cookie由服务器创建,并发送给浏览器,最终由浏览器保存

Cookie的用途

  • 测试服务端发送cookie给客户端,客户端请求时携带cookie

Cookie的使用


  • cookie的获取
Go 复制代码
func (c *Context) Cookie(name string) (string, error)

Cookie 返回请求中提供的命名 cookie,如果未找到则返回 ErrNoCookie。并返回命名的 cookie 是未转义的。如果多个 cookie 与给定名称匹配,则只会返回一个 cookie。

  • cookie的设置
Go 复制代码
func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)

SetCookie 将 Set-Cookie 标头添加到 ResponseWriter 的标头中。提供的 cookie 必须具有有效的名称。无效的 cookie 可能会被静默丢弃。

参数:

name:cookie的名称

value:cookie的值

maxAge int:cookie存活时间,单位为秒

path:cookie所在目录

domain string:域名

secure:是否只能通过https访问

httpOnly bool :是否允许别人通过js获取自己的cookie

实例演示

Go 复制代码
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func TestHandler(c *gin.Context) {

// 获取客户端是否携带cookie
	if cookie, err := c.Cookie("username"); err != nil {
		fmt.Println("cookie", cookie)
		fmt.Println("err", err)
         
        cookie = "lucas"
        // 给客户端设置cookie
		c.SetCookie("username", cookie, 60*60, "/", "localhost", false, true)

		fmt.Printf("cookie的值为:%v\n", cookie)
		c.String(200, "测试cookie")
	}

}

func main() {
   // 1.创建路由
   // 默认使用了2个中间件Logger(), Recovery()
	engine := gin.Default()

	engine.GET("/cookie", TestHandler)
	engine.Run(":8888")
}

cookie 
err http: named cookie not present
cookie的值为:lucas
[GIN] 2023/09/12 - 18:29:13 | 200 |       924.4µs |             ::1 | GET      "/cookie"

查看cookie

相关推荐
平头哥AI3 小时前
Day 01 | go run 跑通第一个 Go 程序,go build 留下一个能拷走的 exe
开发语言·后端·golang
2601_962296514 小时前
如何使用Golang包路径_管理本地和远程模块引用
golang·数据转换·变量定义·常用库·编程语言区别
FfHUCisI9 小时前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
我不会起名字3229 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
gsls20080810 小时前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp
名字还没想好☜11 小时前
Go 时间格式化为什么用 2006-01-02:time.Format/Parse 的参考时间、时区与解析踩坑
开发语言·后端·golang·go
FfHUCisI1 天前
Golang Map 哈希表实现
golang·哈希算法·散列表
源代码•宸1 天前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang
李燚1 天前
把规则搬回家:三个 BC 的贫血→充血重构实录(第103篇)
golang·agent·ddd·领域驱动设计·eino·deepflux·eino adk
astronautyi1 天前
Go 运行时内存分配与 GC 位图深度剖析
开发语言·后端·golang