You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go Fiber会话中间件浏览器不保存Cookie问题求助

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部署应用
  • 使用伪域名(后端子域名)
  • 更换不同浏览器

修复方案

  1. 修正CookieSecure配置
    服务器返回的Cookie带有secure属性,但会话配置里CookieSecure设为false,二者矛盾。在HTTPS环境下,SameSite=None要求Cookie必须同时设置Secure,因此需将CookieSecure改为true,否则浏览器会拒绝保存该Cookie。

  2. 调整CookieDomain设置
    对于127.0.0.1这类IP地址,部分浏览器对domain属性的处理存在兼容性问题。可以尝试移除CookieDomain配置(或设为空字符串""),让Fiber自动适配当前域名。

  3. 确保前端请求携带凭证
    前端发起跨域请求时,必须显式设置携带凭证:

    • Axios:axios.defaults.withCredentials = true
    • Fetch:fetch(url, { credentials: 'include' })
      否则浏览器不会保存后端发送的Cookie。
  4. 规范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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:13:20