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并允许携带凭证:
- 安装依赖:
pip install flask-cors
- 修改Flask代码:
from flask_cors import CORS app = Flask(__name__) app.secret_key = os.urandom(24) # 配置CORS,允许指定前端域名,开启凭证携带 CORS(app, supports_credentials=True, origins=["你的Spring前端域名/端口"])
- 前端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:
- 安装依赖:
pip install flask-redis flask-session
- 配置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)
- Spring服务器连接同一个Redis,通过约定的session ID(如请求头传递)读写共享数据。
验证步骤
- 检查Cookie一致性:在浏览器开发者工具
Application标签中查看Flask设置的session Cookie,对比Spring请求的Cookie; - 确认请求Origin符合跨域配置规则;
- 测试前端直接传递参数的方式,验证session能否正常存储和读取。
内容的提问来源于stack exchange,提问作者이의준
相关产品推荐
相关产品推荐

