Nitin kumar
Nitin kumar

Reputation: 1

Session not persisting between Flask and SocketIO

I have been trying to build a real-time app, but unfortunately, I am not able to work around session management in SocketIO. I will not be pasting my original code; instead, I wrote the code below to help illustrate my issue in fewer lines.

I can set a session key in the /login route and fetch it in the /test route. However, inside SocketIO events, there are no session keys/values. In short, SocketIO seems to be managing its own session keys, but I need both Flask routes and SocketIO to share the same session.

Here is my code:

from flask import Flask, session, request
from flask_session import Session
from flask_socketio import SocketIO
from flask_cors import CORS

app = Flask(__name__)
app.secret_key = "enufwbqbiuwefbwebfuwergbfyewrgbuyrbbwueuwen"
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
socketio = SocketIO(app, manage_session=False, cors_allowed_origins='*')
cors = CORS(app, resources={r"/socket.io/*": {"origins": "http://localhost:5000"}})

@app.route('/login')
def login():
    session['username'] = "Hello world"
    return 'Logged in successfully'

@app.route('/test')
def test():
    if session.get('username'):
        return session.get('username')
    return 'Username key not set'

@socketio.on('connect')
def handle_connect():
    if session.get('username'):
        print(session['username'])
    else:
        print('Username key not set')

@socketio.on('test_socket')
def test_socket():
    if session.get('username'):
        print(session['username'])
    else:
        print("User not logged in")

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

My client side code


const socket = io('http://localhost:5000', 
{
        withCredentials: true 
});

socket.emit('test_socket');

I am on windows machine, so i am not sure if that might be the issue.

Upvotes: 0

Views: 64

Answers (0)

Related Questions