フラスコ内でセッションをタイムアウトにする簡単な方法はありますか?


83

ユーザーがアカウントを持っていてログインできるフラスコを使ってウェブサイトを構築しています。ロギングの一部とロール管理にflask-principalを使用しています。たとえば5分または10分後にユーザーのセッションを期限切れにする方法はありますか?フラスコのドキュメントやフラスコの校長のドキュメントではそれを見つけることができませんでした。

手作業でそれを行う方法を考えました。ログイン時にタイムタグをサーバー側に設定し、ユーザーが次に実行するアクションで、サーバーはそのタイムスタンプのタイムデルタを確認し、セッションを削除します。


非アクティブな状態が5分または10分後にユーザーセッションを期限切れにしますか、それともアクティビティレベルに関係なく単に期限切れにしますか?
codecool 2012

非アクティブの場合、私はそれを実装する必要があります。ブラウザが閉じられたとき、または24時間で期限切れになるだけです。現在、有効期限はありません。
verrochio 2012

3
セッションを作成するには活動に対する有効期限切れ:stackoverflow.com/questions/19760486/...
zengr

回答:


122

永続的なセッションがない限り、ブラウザを閉じるとフラスコセッションは期限切れになります。次のことを試すことができます。

from datetime import timedelta
from flask import session, app

@app.before_request
def make_session_permanent():
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=5)

Flaskのデフォルトでは、permanent_session_lifetimeは31日に設定されています。


14
を変更してapp.secret_keyサーバーを再起動すると、セッションがリセットされることも事実だと思います。
ジョン

16
session.permanentはデフォルトでFalseです:flask.pocoo.org/docs/api/#flask.session.permanent
Randy Syring

1
パーマネントセッションの有効期限が切れたときに何が呼び出されるか知っていますか?
のRamu

4
before_request代わりにここを使用する理由は何before_first_requestですか?
srctaha 2017年

1
@srctaha私は多分、彼は人々がサイトを訪れるたびに、有効期限が切れるリフレッシュしたいと思います
Tankyウー

25

はい、設定する必要があります

session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=5)

しかし、私はそれがに設定されるべきではないと思いますapp.before_request、これはそれらを設定することにつながるかもしれません。

これpermanent_session_lifetime基本構成であるため、アプリを構成するときに設定する必要があります。

 from datetime import timedelta
 app = Flask(__name__)
 app.config['SECRET_KEY'] = 'xxxxxxxxx'
 app.config['PERMANENT_SESSION_LIFETIME'] =  timedelta(minutes=5)

sessionクライアントごとに作成された遺言は、他のクライアントからの区切り。だから、私session.permanentはあなたが設定するのに最適な場所はあなたがいるときだと思いますlogin()

@app.route('/login', methods=['GET', 'POST'])
def login():
    #After Verify the validity of username and password
    session.permanent = True

Apache- Airflow(Flaskを使用)の場合、github.com / apache / incubator-airflow / blob / master / airflow / contrib /でこれを設定しても機能しませんでした。
カイルブリデンスティン2018

1
:最新バージョンへの回答内のリンクの更新基本設定
Wavesailor

私は上記の解決策で部屋や放送などでフラスコセッションを使用しますが、私にはうまくいきませんでした。5分後、ユーザーは直接ログアウトされ、ログインページにリダイレクトされると思います....これは永続的なセッションで可能ですか?またはdbを使用してログイン日付を保存することでこれを達成する必要がありますか?
sqp_125
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.