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
相关产品推荐
相关产品推荐

