【发布时间】:2020-04-18 10:46:26
【问题描述】:
我正在用烧瓶编写一个小型网络应用程序。当两个用户(在同一网络下)尝试使用 app.js 时,我遇到了会话变量问题。
这是代码:
import os
from flask import Flask, request, render_template, g, session
from random import randint
def random():
session['number'] = randint(0,4)
return None
@app.route('/')
def home():
if not session.get('logged_in'):
return render_template('login.html')
else:
return check()
@app.route('/login', methods = ['GET', 'POST'])
def login():
global username
username = request.form['username']
session['logged_in'] = True
session['username'] = username
return check()
@app.route('/check', methods=['GET', 'POST'])
def check():
random()
return render_template('file.html', number = session['number'], user = session['username'])
if __name__ == "__main__":
app.secret_key = ".."
app.run(host = '0.0.0.0',port = 3134, debug=False)
在 file.html 中有一个按钮类型“提交”,它调用 '/check' 路由。 问题是当两个用户同时使用应用程序时,因为变量“数字”等于最后一个按下按钮的用户的变量“数字”......两个会话之间没有独立性。
我希望这两个用户有两个独立会话,就像他们在本地主机中使用我的应用程序一样。
【问题讨论】:
-
你可以把你的变量放在一个字典中,以用户名作为键,然后保存在会话中
-
@MrLeeh 所以我可以写:random = randint(0,4) session = {"username": "username", "username": "random"} ??然后我怎样才能得到我想在 render_template 中传递的变量?
-
创建一个包含您的号码
numbers = {'username1': 4, 'username2': 2}的字典并将其传递给您的会话session['numbers'] = numbers -
我不能写 numbers = {'username1': 4, 'username2':2} 因为我不知道有多少用户调用了这个函数......
-
这只是一个例子。在您的代码中,您当然可以使用
numbers['usernamex']=randint(0,4),甚至可以使用session['numbers']['usernamex'] = randint(0,4)。
标签: python session variables flask login