"Vercel Deployment with Flask: Multiple app.route('/') Calls Creating Inconsistent Session IDs and Global Variable Behavior"

When I create a new vercel deployment with flask, it runs the main build function several times in a row. app.route(“/”). I don’t know why that happens.

@app.route('/')
def build():
    return render_template('chatdoc.html')

Also, I’m trying to maintain a specific session id between requests from different functions from my server. Inside of the build function, I first create a new session id to identify each unique user on my server and use that id as a key value to store a specific user’s queries.

user_queries = {}

@app.route('/')
def build():
    session_id = session.get("session_id")
    if not session_id:
        session_id = str(uuid.uuid4())
        session['session_id'] = session_id

    if session_id not in user_queries:
        user_queries[session_id] = []
    return render_template('page.html')

But somehow, vercel runs this function multiple times and creates multiple session_ids and hence multiple keys inside of user_queries.
When I call a function to get the data, it works fine at first and the very first session_id created is what is remembered. However, when I switch to a different page and get the session_id from there, it returns the very first session_id which was created, sometimes with an empty dictionary from the user_queries.

@app.route('/home')
def home():
    session_id = session.get('session_id')
    print(session_id)
    print(user_queries)
    return render_template('home.html')

In the home function, when I reload the page multiple times, the session_id returns None the user_queries are also forgotten and returns an empty dictionary despite being a globa variable.

when I use a different function to get the session_id as well, it also returns the very first one, but this time the dictionary is empty despite being a global variable.
When I reload the newly visited homepage again, this time, it returns None as the session_id and an empty dictionary for user_queries.

@app.route('/respond', methods=['POST'])
def respond():
    session_id = session.get("session_id")
    print(user_queries[session_id])
    return user_queries[session_id]

In some cases, after I reload the homepage, when this respond function is called, it returns an empty dictionary, sometimes a previously created one, and also returns the latest session_id when the session.get function is called. (the latest session_id, created in the app.route(“/”) function.) Then I get a ‘KeyError’ message.

Why does all of this happen. Can someone please tell me how to fix it?

Hey @piraytekinz , just a question, have you tried v0? it might help a lot!

No I haven’t. Would it help me solve my problem?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.