flask - 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'] 特定于登录的用户。
解决方案
$('#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。
推荐阅读
- javascript - js:如何使模块可用于导出的函数?
- python - 没有错误消息,但这不会输出任何内容
- owl - Protege Pellet Reasoner 有错误但不是 HermiT
- python - 如何通过指定行和列从轴对象返回特定轴?
- angular - angular 11 不在订阅内导航
- return - ups void(cancellation)和return shipping有什么区别
- java - 登录 Quarkus 在开发模式下工作,但不在 JVM docker 映像中输出
- c++ - 为什么编译器不喜欢与“Iter”关联的所有字符串?
- sql - SQL WITH 语句
- rust - 如何从不同的模块导入两个具有相同名称的类型?