首页 > 解决方案 > Flask-SocketIo | 登录 Chrome 后不会返回 session['name'] 值,但 Firefox 会

问题描述

当我使用用户 ID 登录时,Chrome 不会使用会话 ['name'] 返回用户名,这是我使用烧瓶会话提供的。但是火狐可以。

铬截图

火狐截图

Python

 @app.route('/')
 @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)    

JS

const socket = io("https://"+document.domain+":"+location.port); 
async function get_Name(){
    return fetch("/get_name")
    .then(function (response) {
        return  response.json();   
       })
       .then(function (text) {  
         return text["name"];
       });
}
socket.on('connect', async function() {
var usr_name =  await get_Name();
console.log(usr_name);
if(usr_name != ''){
    var data = {
        'name': usr_name,
        'msg': 'User has connected!'
    };
    socket.emit('message',data);    
}

Chrome 返回一个空的用户名,而 Firefox 返回记录的用户名

标签: flaskflask-socketio

解决方案


推荐阅读