HttpOnly、Secure与SameSite缺一不可,否则线上Cookie可能被浏览器丢弃或遭JS窃取;c.Cookies("name")安全读取单值,c.Cookie()写入时须显式配置三属性防XSS与CSRF。

直接用 c.Cookies("name") 读,用 c.Cookie() 写,但缺 HttpOnly、Secure、SameSite 任意一个,线上 Cookie 就可能被浏览器丢弃或被 JS 窃取。
读取 Cookie:别只依赖 c.Cookies() 返回的 map
它返回所有 Cookie 的 map[string]string,但业务中基本只需要一个值。用 c.Cookies("session_id") 更安全——内部做了空值判断,没找到就返回空字符串,不会 panic。
- 如果需要区分“Cookie 不存在”和“值为空”,得手动解析
c.Get("Cookie")头(不推荐,仅调试用) - JS 设置的 Cookie 若带
HttpOnly: true,服务端仍可读,前端 JS 读不到——这是预期行为,不是 bug - 别用
c.Query("token")或c.FormValue("token")替代 Cookie 读取,这绕过SameSite防护,还暴露在 URL 或表单里
设置 Cookie:c.Cookie() 默认不设安全属性
Fiber 的 c.Cookie() 是对 fasthttp.SetCookie 的封装,但默认 HttpOnly=false、Secure=false、SameSite=""。开发时可能正常,上线后浏览器直接拒发。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
-
HttpOnly: true—— 防 XSS 窃取敏感值(如session_id、JWT) -
Secure: true—— 强制只走 HTTPS;开发环境可设false,但部署前必须改回来 -
SameSite: "Lax"或"Strict"—— 防 CSRF;空字符串会退化为旧规则,不安全 -
MaxAge优先于Expires,设为0表示会话级 Cookie(关浏览器即失效)
JWT 存 Cookie 时的特殊注意事项
很多人把 JWT 直接塞进 Cookie,但容易忽略签名验证前必须先读出来,且不能让前端 JS 操作它。
- 务必设
HttpOnly: true和Secure: true,否则 Token 可被 XSS 盗取 - 别混用认证方式:若同时支持 Cookie 和 Header(比如兼容 App),提取逻辑要统一走
extractors.Chain(),而不是一边用c.Cookies("token"),一边用c.Get("Authorization") - JWT 不是会话存储方案,它本身应有签名+有效期,服务端仍需校验,不能只信 Cookie 值
最常被忽略的是 SameSite 值必须写成字符串 "Lax",而 Fiber 底层用的是 fasthttp,它不认 Go 标准库的 http.SameSiteLaxMode 常量——这点和 Revel、net/http 完全不同,填错就等于没设。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










