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

Flask.session生成的Cookie被识别为第三方Cookie无法读取如何解决?

问题原因

Flask默认的session是基于Cookie实现的,会把加密后的session数据存储在用户本地Cookie中。当你的Flask应用属于第三方站点(比如被其他域名的页面用iframe内嵌、作为跨站接口被调用)时,Chrome、Brave、Chromium的第三方Cookie禁用规则会阻止浏览器存储、发送你站点域名下的Cookie,导致后续请求中Flask无法读取到对应Cookie解析session,最终session.get()返回None。
如果你的应用是用户直接访问的第一方站点也出现该问题,通常是你手动配置了SESSION_COOKIE_SAMESITE = None,该配置下Cookie会被浏览器判定为跨站可用的第三方Cookie,被禁用规则命中。

修复方案
  • 方案1:调整Cookie SameSite属性(仅适用第一方站点误触发的场景)
    将Flask session Cookie的SameSite属性改为Lax或Strict,即可让浏览器判定为第一方Cookie,不会被第三方禁用规则拦截,配置示例:

    # 生产环境如果用HTTPS可以同时开启SESSION_COOKIE_SECURE
    app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'
    app.config['SESSION_COOKIE_SECURE'] = False # 本地HTTP开发环境关闭该配置
    
  • 方案2:改用服务端存储session(适用确实是第三方嵌入的场景)
    放弃默认的Cookie存储session逻辑,改用服务端存储(Redis、数据库均可),session id通过请求参数、自定义请求头传递,完全绕开Cookie限制。可以通过flask-session扩展快速实现:

    1. 安装依赖:pip install flask-session redis
    2. 配置示例:
    import redis
    from flask_session import Session
    
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port=6379)
    

    后续请求时前端将获取到的session id放在自定义请求头(比如X-Session-Id)或接口参数中传递,后端拦截请求读取对应值后从服务端存储中拉取session数据即可。

  • 方案3:可引导用户将你的站点加入浏览器的Cookie允许白名单,该方案需要用户手动操作,优先级低于上述技术方案。

内容的提问来源于stack exchange,提问作者étale-cohomology

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:06