Flask 会话变量

新手上路,请多包涵

我正在用烧瓶写一个小型网络应用程序。当两个用户(在同一网络下)尝试使用应用程序时,会话变量出现问题。

这是代码:

 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”路由。问题是当两个用户同时使用应用程序时,因为变量“数字”等于最后一个按下按钮的用户的变量“数字”……两个会话之间没有独立性。

我希望这两个用户有两个独立会话,就像他们在本地主机上使用我的应用程序一样。

原文由 Teor9300 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 587
1 个回答

使用 randint(0,4) 生成数字意味着它们有时 对于 不同的用户是相等的。每次使用 uuid 生成唯一编号:

 from uuid import uuid4
def random():
    session['number'] = str(uuid4())
    return None

或发电机:

 import itertools
consequent_integers = itertools.count()

def random():
    session['number'] = consequent_integers.next()
    return None

原文由 Fine 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题