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

Flask会话数据接收Spring Server请求后跨请求无法持久化

问题原因分析

你遇到的session数据丢失问题,核心原因是会话不匹配:

  • 从Spring Server发送到/receive-cust-id//receive-prod-id的请求,和浏览器访问/chatbot的请求属于两个完全独立的客户端会话。Flask的session绑定在客户端Cookie上,Spring请求的Cookie和浏览器的Cookie完全不同,因此两边的session数据无法互通。
  • 若前端是通过AJAX从不同域名/端口访问Flask,还可能存在跨域请求未携带Cookie的问题。
解决方案

针对你的场景,推荐以下几种解决方式:

1. 让前端浏览器统一传递身份标识

不要通过Spring服务器直接调用Flask接口设置session,改为:

  • Spring服务器将cust_id和prod_id返回给前端浏览器;
  • 前端在访问Flask的/chatbot或发送聊天请求时,通过请求体、URL参数或自定义Cookie将这两个ID传递给Flask;
  • Flask在chatbot路由中直接从请求中获取值,或存入当前浏览器的session中。

示例修改代码:

@app.route('/chatbot', methods=['GET', 'POST'])
def chatbot():
    # 从URL参数获取(GET请求场景)
    cust_id = request.args.get('cust_id')
    prod_id = request.args.get('prod_id')
    # 或从请求体获取(POST请求场景)
    # cust_id = request.json.get('cust_id')
    # prod_id = request.json.get('prod_id')
    
    # 存入当前浏览器的session
    if cust_id:
        session['cust_id'] = cust_id
    if prod_id:
        session['prod_id'] = prod_id
    
    print('Cust ID:', session.get('cust_id'))
    print('Prod ID:', session.get('prod_id'))
    return "Chatbot Page"

2. 配置跨域支持(前端跨域请求Flask场景)

如果前端从Spring所在域名/端口直接请求Flask接口,需要在Flask中配置CORS并允许携带凭证:

  1. 安装依赖:
pip install flask-cors
  1. 修改Flask代码:
from flask_cors import CORS

app = Flask(__name__)
app.secret_key = os.urandom(24)
# 配置CORS,允许指定前端域名,开启凭证携带
CORS(app, supports_credentials=True, origins=["你的Spring前端域名/端口"])
  1. 前端AJAX请求需设置withCredentials: true(以axios为例):
axios.post('http://localhost:5000/receive-cust-id', {custId: 'IMSI'}, {withCredentials: true})

3. 使用共享Session存储(服务器间交互场景)

若必须让Spring和Flask共享会话数据,可使用Redis等第三方存储替代Flask默认的Cookie-based session:

  1. 安装依赖:
pip install flask-redis flask-session
  1. 配置Flask使用Redis存储session:
from flask_session import Session
import redis

app = Flask(__name__)
app.secret_key = os.urandom(24)
# Redis配置
app.config['SESSION_TYPE'] = 'redis'
app.config['SESSION_REDIS'] = redis.Redis(host='localhost', port=6379)
Session(app)
  1. Spring服务器连接同一个Redis,通过约定的session ID(如请求头传递)读写共享数据。
验证步骤
  1. 检查Cookie一致性:在浏览器开发者工具Application标签中查看Flask设置的session Cookie,对比Spring请求的Cookie;
  2. 确认请求Origin符合跨域配置规则;
  3. 测试前端直接传递参数的方式,验证session能否正常存储和读取。

内容的提问来源于stack exchange,提问作者이의준

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:07:37