Flask - 用户离开时重置一切

1 投票
1 回答
857 浏览
提问于 2025-04-18 01:26

我正在写一个Flask应用程序来学习,但我没有使用Flask的会话功能,因为它似乎不太好用。假设我一开始有一个空列表。当用户连接到链接webapp.herokuapp.com时,下面的代码会被执行:

app = Flask(__name__)
app.debug = True 
app.secret_key = 'nosecret'

random_number_list = []

@app.route('/', methods=['POST'])
def login():
    # Read from the from input
    usrn = request.form['username']
    pswd = request.form['password']
    random_number_list = randList() # The list will have 10-20 random integer elements

当我在网站上打印出random_number_list时,代码运行得很好。但是,当我再次访问我的应用程序webapp.herokuapp.com时,random_number_list并没有被重置。相反,新元素被添加到最后的列表中,过程一直在继续。

E.g: at first connection to the webapp:
1 4 5 6 7
Second connection:
1 4 5 6 7 2 3 4 2 1

在def login()中,我尝试在生成新结果之前将random_number_list设置为[],但列表也没有被重置。只有当我将新代码推送到Heroku时,它才会被重置。

有没有人能给我一些建议来解决这个问题?非常感谢!

1 个回答

0

这个问题发生的原因是你的 random_number_list 数组是一个全局变量——它会一直保持不变(在内存中),直到你的服务器重启。

因为你多次访问这个网站,所以数据会不断增加。

你在这里的目标是什么?是让用户登录——存储一些用户特定的信息——然后再登出?如果是这样的话,你真的需要使用会话(sessions)。Flask 的会话框架(http://flask.pocoo.org/docs/quickstart/#sessions)可以让你在用户的电脑上存储数据——这样,每次用户返回你的网站时,你都可以取回之前存储在他们电脑上的数据。

不过要小心——这样做有很多安全隐患。

撰写回答