gpt4 book ai didi

python - Flask session 不会持续存在于 heroku 上

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:43 25 4
gpt4 key购买 nike

当用户登录到我的示例应用程序时,我将用户名键添加到 session 对象中,并将用户对象卡在全局“g”对象之外。见下文。

@app.route('/login/', methods=['GET', 'POST'])
def login():
"""Logs the user in."""

error = None
if request.method == 'POST':
print("login hit")
user = get_user(request.form['username'])
if user is None:
error = 'Invalid username'
print error
elif not check_password_hash(user.password, request.form['password']):
error = 'Invalid password'
print error
else:
flash('You were logged in')
print "logged in"
session['username'] = request.form['username']
g.user = request.form['username']
print error, "error"
return redirect(url_for('main'))

现在,如果用户成功登录(正在发生的情况),他将重定向到主页。这将拆除旧请求并产生一个新请求。问题是当一个新的请求开始时 session 被删除。我正在打印 session key ,但它们都是空的。这只发生在 heroku 上,而不是在我的本地机器上。我做错了什么。

  @app.before_request
def before_request():
print session.keys(), session.values() # shows [] []
print("before request")
print ('username' in session, "in session?")
g.db = connect_db()
g.user = None
if "username" in session:
g.user = get_user(session['username'])

最佳答案

好吧,由于有多个工作人员,这确实是答案,所以我将从评论部分移走它。 :) 你不想在 gunicorn 层使用 redis,而是在你的应用程序中。这四个链接应该可以帮助您:

1) First, enable/install Redis in Heroku

2) Then check this out (将Flasks整个session driver替换成一个基于redis的):这可能有点矫枉过正,我只是将 Redis 用作应用程序中的键存储值(查看我的第三个链接),但您可能会喜欢这种方法。

3) Not as related but shows some usage examples (queue system for flask with redis)

4) Basic redis tutorial for python

这三个链接应该可以帮助您入门,如果这还不够,我会挖掘更多示例,所以请问您是否需要它们!

关于python - Flask session 不会持续存在于 heroku 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com