我最近创建了一个带有登录系统的网站,但它只在只有一个用户同时在网站上时才起作用。例如,如果我登录,其他人访问我的网站,他们将自动登录到我的帐户。我如何使每个用户会话分离
logged = False
@app.route('/', methods=['POST', 'GET'])
def home():
global logged
if request.method == 'POST':
logged = False
return redirect(url_for('home'))
else:
if not logged:
return render_template('home.html')
elif logged:
return render_template('logged.html')
@app.route('/login', methods=['POST', 'GET'])
def login():
global logged, username
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
con = sqlite3.connect('users.db')
c = con.cursor()
user = False
if c.execute("SELECT * FROM users WHERE username = ?", [username]):
for row in c.execute("SELECT * FROM users WHERE username = ?", [username]):
user = row
if user:
if user[1] == password:
logged = True
con.commit()
con.close()
if logged:
return redirect(url_for('home'))
else:
return render_template('loginerror.html')
else:
return render_template('loginerror.html')
else:
return render_template('login.html')
在主页上,有一个登录按钮,当用户登录时,它会将他们重定向到主页并将logged设置为True。但是,这会影响网站上的每个用户,并将他们全部登录到同一个帐户
想想你在做什么。这是一个微妙的错误,很容易被忽视。当用户登录时,您正在设置“logged”和“username”的值。这些值存储在服务器的内存中。因此,当其他人访问您的网站时,他们将登录到同一帐户
我不确定您是否读过HTTP请求是无状态的。无状态意味着对于服务器接收到的任何请求,服务器都不记得以前请求中的任何内容Wikipedia有一篇关于这方面的好文章
您要做的是使用cookie或某种会话机制在用户和服务器之间建立身份验证。查看此tutorial了解有关如何使用烧瓶执行此操作的更多信息
相关问题 更多 >
编程相关推荐