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. Cookie 设置后不生效
- 域名/路径不匹配
- Secure模式在HTTP下被拦截
- 浏览器隐私模式限制
- 超过4KB大小限制
- SameSite=Lax阻止POST请求携带
- 服务端未设置
Access-Control-Allow-Credentials
- iOS Safari的ITP智能防跟踪机制
2. 如何批量删除Cookie?
// 设置过期时间为负值
c.SetCookie("token", "", -1, ...)