Flask会话变量无法跨路由访问的问题(Brave浏览器异常)
Flask会话变量在Brave浏览器跨路由传递失败的排查方案
代码中已通过
flask-session配置文件系统存储会话,在/set_shop_info路由中成功设置shop_origin和have_shop_info_in_session,但重定向到/路由后会话变量丢失,仅Brave浏览器出现该问题,已关闭Brave Shields且Cookie显示已存储。
排查步骤与解决方案
1. 检查Brave的Cookie隐私配置
- 打开Brave设置 → 隐私和安全 → Cookie和其他网站数据
- 确认未开启阻止跨站Cookie,或把当前站点添加到“允许的站点”列表
- 关闭“清除浏览数据时删除Cookie”选项,避免会话Cookie被意外清除
2. 显式配置Flask会话Cookie属性
修改Flask配置,强制设置Cookie的SameSite属性,适配Brave的隐私策略:
app = Flask(__name__) app.secret_key = os.urandom(24) # 优化会话Cookie配置 app.config['SESSION_TYPE'] = 'filesystem' app.config['SESSION_COOKIE_SAMESITE'] = 'Lax' # 同源场景优先用Lax,跨域场景设为None app.config['SESSION_COOKIE_SECURE'] = False # 本地HTTP测试设为False,线上HTTPS必须设为True app.config['SESSION_COOKIE_HTTPONLY'] = True # 禁止前端JS读取Cookie,提升安全性 Session(app)
如果是前后端跨域部署,需调整为:
app.config['SESSION_COOKIE_SAMESITE'] = 'None' app.config['SESSION_COOKIE_SECURE'] = True # 仅HTTPS环境可用
3. 确保AJAX请求携带Cookie
如果fetch_shop_info.html中用fetch发送请求,必须添加credentials: 'include'参数,否则会话Cookie不会被传递:
fetch('/set_shop_info', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', // 关键:强制携带会话Cookie body: JSON.stringify({ shopOrigin: 'testing-store.myshopify.com' }) }) .then(response => response.json()) .then(data => { if (data.status === 'success') { window.location.href = '/'; } });
若使用XMLHttpRequest,需设置xhr.withCredentials = true;。
4. 清除Brave站点缓存与Cookie
- 点击地址栏左侧锁图标 → Cookie → 移除当前站点的所有Cookie
- 按
Ctrl+Shift+Del清除浏览器缓存,选择“缓存的图像和文件”,重启浏览器后重新测试
5. 验证会话存储路径权限
检查flask-session默认的文件存储目录flask_session是否有读写权限:
# 查看目录权限 ls -ld flask_session/ # 权限不足时修改 chmod 755 flask_session/
内容的提问来源于stack exchange,提问作者reGit
相关产品推荐
相关产品推荐

