目录

Go Gin设置Cookie及参数安全指南:从入门到生产环境配置

cookie在开发中经常会用到,go + gin 框架在使用 cookie 上非常的高效快速,仅仅只需几行代码即可安全的操作 cookie,代码如下,并且提供生成环境安全配置模版例子

一、设置cookie

func main() {
    r := gin.Default()
    r.GET("/set", func(c *gin.Context) {
        c.SetCookie("user_token", "abc123", 3600, "/", "localhost", false, true)
        c.String(200, "Cookie写入成功!")
    })
    r.Run(":8080")
}

浏览器访问 http://localhost:8080/set 即可查看Cookie

二、参数详解

参数 类型 含义
name string cookie的名称
value string cookie的值;value值中不允许有空格符的存在,建议在设置时处理下,注意做好加密处理
path string Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。
domain string 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”
maxAge int 被访问后的存活时间;这个时间是个相对值(比如:3600s);MaxAge=0,未指定该属性;MaxAge<0时,删除cookie,相当于“Max Age:0”
secure bool 是否需要安全传输,为true时只有https才会传输该cookie
httpOnly bool 为true时,不能通过js读取该cookie的值

其他参数可以见:http.Cookie{}

安全建议:

  • 名称避免暴露业务信息(如user_password
  • 敏感值需加密存储(推荐AES-GCM算法)

三、生产环境最佳实践

  • value 要加密
  • domain 限制允许访问的域名
  • secure=true 开启 https 安全访问
  • httpOnly=true禁止JS访问

安全配置模版例子如下:

c.SetCookie(
    "auth_token", 
    GenerateSecureToken(),
    86400,    // 1天过期
    "/dashboard", 
    ".yourdomain.com", 
    true,     // HTTPS only
    true,     // HttpOnly
    gin.CookieSameSiteLaxMode
)

常见问题

  1. 域名/路径不匹配
  2. Secure模式在HTTP下被拦截
  3. 浏览器隐私模式限制
  4. 超过4KB大小限制
  5. SameSite=Lax阻止POST请求携带
  6. 服务端未设置Access-Control-Allow-Credentials
  7. iOS Safari的ITP智能防跟踪机制

2. 如何批量删除Cookie?

// 设置过期时间为负值
c.SetCookie("token", "", -1, ...)