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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:03:10