从 Spring 服务器接收后,Flask 会话数据在请求之间不保留

问题描述 投票:0回答:1

我是一名初学者开发人员,学习了一周 Flask。我正在使用 OpenAI API 构建一个聊天机器人,我的导师建议我尽量减少全局变量。我改用会话而不是全局变量,但现在我遇到了会话数据为 None 的问题。

从Spring服务器接收到cust_id和prod_id并将它们存储在会话中后,存储后数据被正确打印,但是当我尝试在chatbot()函数中访问它时,cust_id和prod_id都显示为None。

这是我的代码的简化版本:

from flask import Flask, session, request, jsonify, render_template
from openai import OpenAI
import os

app = Flask(__name__)
app.secret_key = os.urandom(24)

api_key = os.getenv('OPENAI_API_KEY')
client = OpenAI(api_key=api_key)

@app.route('/receive-cust-id', methods=['POST'])
def receive_cust_id():
    session['cust_id'] = request.json.get('custId')
    print("Session cust id : ", session['cust_id'])
    return jsonify({"status": "success"})

@app.route('/receive-prod-id', methods=['POST'])
def receive_prod_id():
    session['prod_id'] = request.json.get('prodId')
    print("Session prod id : ", session['prod_id'])
    return jsonify({"status": "success"})

@app.route('/chatbot', methods=['GET', 'POST'])
def chatbot():
    print('Cust ID:', session.get('cust_id'))
    print('Prod ID:', session.get('prod_id'))
    return "Chatbot Page"

if __name__ == '__main__':
    app.run(debug=True)

但是,会话值在 chatbot() 路由中打印为 None,即使它们在 receive-cust-id 和 receive-prod-id 路由中设置正确。有谁知道为什么会发生这种情况以及我如何跨请求保留会话数据?


===

Session cust id :  IMSI

127.0.0.1 - - \[07/Sep/2024 16:31:20\] "POST /receive-cust-id HTTP/1.1" 200 -

session :  \<SecureCookieSession {}\>

session.get(cust_id) :  None

session.get(prod_id) :  None

127.0.0.1 - - \[07/Sep/2024 16:31:20\] "GET /chatbot HTTP/1.1" 200 -

127.0.0.1 - - \[07/Sep/2024 16:31:20\] "GET /static/css/chatbot.css HTTP/1.1" 304 -

session :  \<SecureCookieSession {}\>

session.get(cust_id) :  None

session.get(prod_id) :  None

\[{'role': 'user', 'content': '만화책 한 권 추천해줘'}\]

127.0.0.1 - - \[07/Sep/2024 16:31:28\] "POST /chatbot HTTP/1.1" 200 -

prodId from spring: prod43

Session prod id :  prod43

127.0.0.1 - - \[07/Sep/2024 16:32:03\] "POST /receive-prod-id HTTP/1.1" 200 -

session :  \<SecureCookieSession {}\>

session.get(cust_id) :  None

session.get(prod_id) :  None

===

附注我已确保所有浏览器 cookie 设置均设置为“允许”。

python flask session
1个回答
0
投票

会话中的数据似乎在请求之间丢失了。通常,造成这种情况的原因是客户端在请求之间没有发送回会话 cookie,这使得 cookie 不可用。如果 cookie 未在请求之间共享,请尝试显式设置 SESSION_COOKIE_SECURESESSION_COOKIE_SAMESITE

app.config['SESSION_COOKIE_SECURE'] = True app.config['SESSION_COOKIE_HTTPONLY'] = True app.config['SESSION_COOKIE_SAMESITE'] = 'Lax' # Or 'None' for cross-domain requests
另外,我建议使用 CORS(跨源请求),因为它允许跨域共享会话 cookie。

跨域资源共享(CORS)是一种集成应用程序的机制。 CORS 定义了一种在一个域中加载的客户端 Web 应用程序与不同域中的资源进行交互的方式。

from flask_cors import CORS CORS(app, supports_credentials=True)
请告诉我这是否有效。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.