首页 > 解决方案 > Flask-Socketio 会话返回最后一个值

问题描述

服务器端

@app.route('/login',methods=['GET','POST'])
def login():        
    if request.method == 'POST':
        if Users.is_user(request.form['username'],request.form['password']):
            name = Users.get_name(request.form['username'])
            session['name'] = name
            return redirect(url_for('home'))
        else:
            return redirect(url_for('login'))   
return render_template("login.html",**{'session':session})

@app.route('/get_name',methods=['GET'])
def get_name():
    data = {'name' : ''}
    if NAME_KEY in session:
        data = {'name':session['name']}
    return jsonify(data)

客户端

async function get_Name(){
    return fetch("/get_name")
    .then(function (response) {
        return  response.json();   
      })
      .then(function (text) {
        return text["name"];
      });
}
   socket.on('message', async function(msg) {
   let user_name =  await get_Name();
   $("#messages").append('<li>'+user_name+':'+msg+'</li>');
   console.log('Received message');
  });
});

当最后一个用户登录时,所有用户的用户名都会更改为最后一个用户名。但是在日志中,我可以看到 session['name'] 特定于登录的用户。

标签: flasksessionflask-sqlalchemyflask-socketio

解决方案


$('#sendbutton').on('click', async function() {
var user_name =  await get_Name();
var msg = $('#myMessage').val()
var data = {
    'name': user_name,
    'msg' : msg
};
socket.emit('message',data);
$('#myMessage').val('');
});

我使用emit 发送包含发送消息的用户名称的数据,然后通过python 中的emit 函数再次将其发送到javascript。


推荐阅读