flask - 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 返回记录的用户名
解决方案
推荐阅读
- php - 如何在php结果表的每一行添加删除按钮
- spring-jdbc - 自动装配 JdbcTemplate 与数据源?
- python - 比较循环中的下一项,连接字符串并保留列表项
- ios - 如何从顶部添加淡入淡出到视觉效果视图模糊 - SWIFT
- python - Django 不会在多个模板中呈现表单?
- r - 如何在 RStudio / R 中使用我的 AMD GPU 进行处理?
- jestjs - 用玩笑测试动态页面
- reactjs - 如何在 React 中对 App 进行部分渲染
- c++ - 解析调用图
- wordpress - 如何自动将文件从 EC2 复制到 WordPress(由 EC2 支持)?