4

ユーザーがサンプル アプリケーションにログインすると、セッション オブジェクトにユーザー名キーを追加し、ユーザー オブジェクトをグローバル "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'))

ここで、ユーザーが正常にログインすると (これが起こっていることです)、メイン ページにリダイレクトされます。これにより、古いリクエストが破棄され、新しいリクエストが生成されます。問題は、新しいリクエストが開始されるとセッションがワイプされることです。セッションキーを印刷していますが、それらはすべて空です。これは、ローカル マシンではなく、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'])
4

2 に答える 2

6

まあ、これは確かに複数の労働者による答えになるので、コメント部分から移動します。:)アプリケーションではなく、gunicornレイヤーでredisを使用したくありません。次の 4 つのリンクが役に立ちます。

1)まず、Heroku で Redis を有効化/インストールします

2)次に、これを確認してください(Flasks全体のセッションドライバーをredisに基づくものに置き換えます):これはやり過ぎかもしれません。アプリでキーストレージの値としてredisを使用するだけです(3番目のリンクを確認してください)が、好きかもしれませんこのアプローチ。

3)関連はありませんが、いくつかの使用例を示します (redis を使用したフラスコのキュー システム)

4) Python の基本的な redis チュートリアル

これらの 3 つのリンクから始めることができます。十分でない場合は、さらにいくつかの例を掘り下げますので、それらが必要かどうか尋ねてください!

于 2012-11-30T23:46:03.910 に答える
0

これをapp.pyに含めてみてください

from flask import session
from flask_session import Session 
app.secret_key = 'A0AKR5TGD\ R~XHH!jmN]LWX/,?RT'
app.config["SESSION_PERMANENT"] = True
app.config["SESSION_TYPE"] = "filesystem"
Session(app)

ディレクトリに関する情報を提供しない

于 2021-12-01T02:15:31.100 に答える