Go Fiber会话中间件浏览器不保存Cookie问题求助
后端部署在https://127.0.0.1:3033,前端部署在https://127.0.0.1:4321,使用Go Fiber及会话中间件搭建认证系统,其他功能正常,但浏览器无法保存会话Cookie。
服务器发送的Cookie:
session_id=7bbb86ac-04e7-43b2-8f0a-345d720efa35; max-age=900; domain=127.0.0.1; path=/; HttpOnly; secure; SameSite=None
当前会话配置
func initSessionStore() *session.Store { store := session.New(session.Config{ CookieHTTPOnly: true, Expiration: time.Minute * 15, Storage: sqlite3.New(), CookieSecure: false, CookieSameSite: "None", CookieDomain: "127.0.0.1", CookiePath: "/", }) return store }
当前CORS配置
cors.New(cors.Config{ AllowOrigins: os.Getenv("FRONTEND_URL"), // 127.0.0.1:4321 AllowCredentials: true, }),
已尝试的解决方案
- 使用HTTPS部署应用
- 使用伪域名(后端子域名)
- 更换不同浏览器
修复方案
修正CookieSecure配置
服务器返回的Cookie带有secure属性,但会话配置里CookieSecure设为false,二者矛盾。在HTTPS环境下,SameSite=None要求Cookie必须同时设置Secure,因此需将CookieSecure改为true,否则浏览器会拒绝保存该Cookie。调整CookieDomain设置
对于127.0.0.1这类IP地址,部分浏览器对domain属性的处理存在兼容性问题。可以尝试移除CookieDomain配置(或设为空字符串""),让Fiber自动适配当前域名。确保前端请求携带凭证
前端发起跨域请求时,必须显式设置携带凭证:- Axios:
axios.defaults.withCredentials = true - Fetch:
fetch(url, { credentials: 'include' })
否则浏览器不会保存后端发送的Cookie。
- Axios:
规范CORS的AllowOrigins格式
确保FRONTEND_URL是完整的HTTPS地址(https://127.0.0.1:4321),而非仅127.0.0.1:4321,否则CORS规则无法正确匹配,导致Cookie被拦截。
修改后的配置示例
会话配置
func initSessionStore() *session.Store { store := session.New(session.Config{ CookieHTTPOnly: true, Expiration: time.Minute * 15, Storage: sqlite3.New(), CookieSecure: true, // 匹配HTTPS环境,必填SameSite=None CookieSameSite: "None", CookieDomain: "", // 移除IP域名配置 CookiePath: "/", }) return store }
CORS配置
cors.New(cors.Config{ AllowOrigins: "https://127.0.0.1:4321", // 完整HTTPS地址 AllowCredentials: true, AllowHeaders: []string{"*"}, // 按需调整允许的请求头 AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, }),
内容的提问来源于stack exchange,提问作者Amirreza
相关产品推荐
相关产品推荐

