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

Flask使用set_cookie设置的cookie无法在其他路由被获取问题求助

问题修复方案

1. 适配Secure属性到当前运行环境

你当前set_cookie配置了secure=True,该规则要求仅HTTPS协议下浏览器才会存储、携带对应Cookie。如果是本地HTTP开发环境,直接调整该配置适配环境即可:

response.set_cookie(
    'session', session_cookie, expires=expires, httponly=True, 
    secure=app.debug == False,  # 生产环境开启secure,本地开发环境关闭
    samesite='Lax' # 显式配置SameSite属性,避免新版本浏览器默认拦截
)

2. 给Ajax请求添加凭证携带配置

同域/跨域下XHR请求要接收响应头的Set-Cookie、后续请求自动携带Cookie,必须显式开启withCredentials配置,修改你的postIdTokenToSessionLogin方法:

const postIdTokenToSessionLogin = function(url, idToken, csrfToken) {
    // POST to session login endpoint.
    return $.ajax({
      type:'POST',
      url: url,
      data: {idToken: idToken, csrfToken: csrfToken},
      contentType: 'application/x-www-form-urlencoded',
      // 新增配置,允许XHR接收、携带Cookie
      xhrFields: {
        withCredentials: true
      }
    });
};

3. 登录成功后手动触发页面跳转

你后端返回的redirect('/home')是给XHR请求返回的302响应,XHR会内部自动跟随重定向,不会触发当前浏览器页面跳转。需要在请求成功的回调里手动跳转到首页:

return postIdTokenToSessionLogin('/sessionLogin', idToken, csrfToken)
.then(function() {
    console.log('logged in.')
    // 新增跳转逻辑,触发页面刷新跳转,自动携带Cookie请求/home
    window.location.href = '/home'
}, function(error) {
    window.location.assign('/login');
})

4. 跨域场景额外配置

如果你的前端和后端域名/端口不一致,还需要配置Flask的CORS支持,允许携带凭证:

from flask_cors import CORS
CORS(app, supports_credentials=True)

内容的提问来源于stack exchange,提问作者h4v3st

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:06:01