Gin框架读写Cookie参数

大枫吖_8525

大枫吖_8525

2026-09-02

307人浏览

原创

setcookie 七个参数必须严格按 name, value, maxage, path, domain, secure, httponly 顺序填写:name/value需非空且url编码;maxage单位为秒,-1立即删除;path推荐"/";domain本地用"localhost"、上线用完整域名;secure仅https设true;httponly敏感信息必为true。

gin框架读写cookie参数

SetCookie 的七个参数怎么填才不踩坑

直接看 SetCookie 函数签名:func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)。这七个参数顺序固定,漏掉或错位会导致编译失败或行为异常。

常见错误是把 maxAge 当成毫秒或传负数但没意识到它等于删除操作;还有本地调试时硬写 "localhost" 却忘了生产环境必须用真实域名(否则浏览器拒绝发送)。

  • name 和 value:必须非空,且 value 不能含控制字符或未编码的特殊符号(如空格、分号),建议先用 url.QueryEscape 处理
  • maxAge:单位是秒。0 表示不设 Max-Age 字段(依赖浏览器会话生命周期);-1 表示立即删除;正数才是有效过期时间
  • path:推荐用 "/",除非你明确要限制到子路径(比如 "/admin");注意路径区分大小写
  • domain:开发时可填 "localhost",但上线必须填完整域名(如 "example.com"),不能带端口;若想覆盖子域,需加前导点(".example.com"),但当前主流浏览器对 localhost 不支持该写法
  • secure:HTTP 环境下必须为 false,否则浏览器直接忽略该 Cookie;HTTPS 环境下建议设为 true
  • httpOnly:涉及敏感信息(如 session token)务必设为 true,否则 JS 可读取,XSS 风险陡增

读 Cookie 时为什么总是 err != nil

c.Cookie("key") 返回两个值:string 和 error。很多新手只检查 err == nil 就认为有值,但其实只要客户端没发这个 key,或者浏览器因 Secure/Domain 不匹配而没携带,都会返回 error。

典型现象:本地跑正常,部署后读不到 —— 很可能是 domain 设成 "localhost" 但线上访问的是 "example.com",导致浏览器根本不会附带该 Cookie。

  • 确认请求 URL 的协议、域名、端口和 SetCookie 时的 domain/path/secure 完全匹配
  • 用浏览器开发者工具的 Application → Cookies 面板,直接查看当前域名下实际存了哪些 Cookie、属性是否符合预期
  • 不要依赖 err 判断“用户未登录”,而应结合业务逻辑(比如 fallback 到无状态 token 或重定向登录)

删除 Cookie 的正确姿势是设 maxAge = -1

很多人误以为删 Cookie 要调用单独的删除方法,其实 Gin 没提供 DeleteCookie,而是复用 SetCookie:把 maxAge 设为 -1,浏览器收到 Max-Age: 0 就立刻丢弃。

NotebookLM CLI Cookies
NotebookLM CLI Cookies

使用 nlm CLI 检索并回答已上传至 NotebookLM 的文档问题。适用于用户需要查找信息、总结来源或查询特定笔记本时。

下载

注意:必须保证 name、path、domain 三个参数和当初设置时完全一致,否则旧 Cookie 不会被覆盖或清除。

  • 错误写法:c.SetCookie("token", "", -1, "/api", "example.com", true, true) —— 如果原来设的是 path="/",这里用 "/api" 就清不掉
  • 安全起见,删除时 value 可任意(甚至空字符串),但 path 和 domain 必须严格复刻设置时的值
  • 如果设置了 httpOnly,JS 无法手动清除,只能靠服务端下发删除指令

SameSite 属性 Gin 原生不支持,得绕一下

Gin 的 SetCookie 没暴露 SameSite 参数,但现代浏览器默认按 Lax 处理,跨站 POST 请求可能被拦截(比如从第三方页面提交表单到你的 API)。

解决办法是不用 c.SetCookie,改用标准库的 http.SetCookie 手动构造:

cookie := &http.Cookie{
    Name:     "session_id",
    Value:    "abc123",
    MaxAge:   3600,
    Path:     "/",
    Domain:   "example.com",
    Secure:   true,
    HttpOnly: true,
    SameSite: http.SameSiteLaxMode, // 或 http.SameSiteStrictMode / http.SameSiteNoneMode
}
http.SetCookie(c.Writer, cookie)

注意:SameSite=None 必须搭配 Secure: true,否则浏览器拒绝接受;调试时若用 HTTP + None,会静默失败。

真正容易被忽略的是:不同浏览器对 SameSite 的默认策略差异很大,尤其老版本 Chrome 和 Safari 行为不一致,上线前务必在目标用户常用浏览器中实测跨站场景。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11899

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1126

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

804

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

Go Web框架Gin接口开发与中间件设计实践
Go Web框架Gin接口开发与中间件设计实践

本专题围绕 Go 在 Web 后端开发中的主流框架 Gin 展开,系统讲解高性能接口开发与中间件机制设计。内容涵盖路由分组、请求绑定、参数校验、统一响应封装、日志与鉴权中间件实现,以及接口限流与异常处理策略。通过实战项目案例,帮助开发者构建结构清晰、性能优良的 Go Web 服务体系,提升接口开发效率与系统可维护性。

2026.03.19

337

21

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

60

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

40

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

40

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Revel 官方 app.conf 文档
Revel 官方 app.conf 文档

共0课时 | 0人学习

php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.8万人学习