Flask-Socketio 会话返回最后一个值

Posted

技术标签:

【中文标题】Flask-Socketio 会话返回最后一个值【英文标题】:Flask-Socketio Session returning last value 【发布时间】:2021-12-14 16:16:24 【问题描述】:

服务器端

@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'] 是特定于登录用户的。

【问题讨论】:

【参考方案1】:
$('#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

【讨论】:

以上是关于Flask-Socketio 会话返回最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 多值参数只返回最后一个值

如何使用 Flask-SocketIO 修复此 KeyError 错误?

如何在sql中插入记录时返回id(id为自动增长)

如何等待传递给 Flask-SocketIO 的 emit() 的回调?

在两个烧瓶服务器之间共享会话

@AuthenticationPrincipal 对象返回会话值