Go语言服务端如何设置Cookie及客户端不生成Cookie问题排查
问题原因及修复方案
- 核心是当前Cookie缺少必要的安全属性配置,以及可能存在跨域请求的配套配置缺失,按以下步骤调整即可:
- 补全Cookie必要属性
你当前只配置了Name和Value,浏览器安全策略会拦截不符合要求的Cookie,修正后的代码如下:
func userLogin(w http.ResponseWriter, r *http.Request) { cookie := &http.Cookie{ Name: "my-cookie", Value: "some value", Path: "/", // 保证全站路径可访问 Domain: "你前端页面的域名,本地测试可填localhost", MaxAge: 3600, // 有效期1小时,不设置默认是会话Cookie,关闭浏览器即清除 Secure: true, // 跨域场景下必须开启,HTTPS环境强制开启 HttpOnly: true, // 可选,禁止JS读取Cookie,防范XSS攻击 SameSite: http.SameSiteNoneMode, // 跨域场景用该值,同站部署可改为http.SameSiteLaxMode } http.SetCookie(w, cookie) w.WriteHeader(200) // 修复原代码字符串未闭合的语法错误 w.Write([]byte("cookie is set")) return }
- 跨域场景配套配置
如果你的前后端部署域名/端口不一致属于跨域场景,还要补充两个配置:
- 前端请求配置:axios需要开启
withCredentials: true,fetch需要开启credentials: 'include',否则浏览器默认不会处理跨域响应的Set-Cookie头 - 后端CORS配置:
Access-Control-Allow-Credentials响应头设为true,Access-Control-Allow-Origin不能用通配符*,必须显式指定前端的完整域名
- 排查技巧
如果调整后仍不生效,可以打开浏览器控制台的Console标签,浏览器会输出明确的Cookie拦截原因,比如SameSite属性不合法、跨域未配置凭证等,也可以在Application -> Cookie列表中查看是否有被标红的拦截记录。
内容的提问来源于stack exchange,提问作者Jesver
相关产品推荐
相关产品推荐

