플라스크에서 세션 시간 제한을 만드는 쉬운 방법이 있습니까?


85

사용자가 계정을 갖고 로그인 할 수있는 플라스크로 웹 사이트를 구축하고 있습니다. 일부 로그인 및 역할 관리를 위해 flask-principal을 사용하고 있습니다. 사용자 세션이 5 분 또는 10 분 후에 만료되도록하는 방법이 있습니까? 나는 플라스크 문서 나 플라스크 교장의 문서에서 그것을 찾을 수 없었다.

수동으로하는 방법을 생각하고 로그인 할 때 시간 태그를 사용하여 서버 측 변수를 설정하고 사용자가 다음 작업을 수행 할 때 서버는 해당 타임 스탬프의 타임 델타를 확인하고 세션을 삭제합니다.


5 분 또는 10 분 동안 활동이 없으면 사용자 세션을 만료 하시겠습니까, 아니면 활동 수준에 관계없이 단순히 만료 하시겠습니까?
codecool

활동이 없으면 구현해야합니다. 브라우저가 닫히거나 24 시간이 지나면 만료됩니다. 지금은 전혀 만료되지 않습니다.
verrochio

3
활동과 관련하여 세션을 만료 시키려면 : stackoverflow.com/questions/19760486/…
zengr

답변:


125

플라스크 세션은 영구 세션이없는 경우 브라우저를 닫으면 만료됩니다. 다음을 시도 할 수 있습니다.

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에서 영구 _session_lifetime은 31 일로 설정됩니다.


14
변경 app.secret_key하고 서버를 다시 시작 하면 세션이 재설정되는 것도 사실이라고 생각 합니다.
John

16
session.permanent는 기본적으로 False입니다. flask.pocoo.org/docs/api/#flask.session.permanent
Randy

1
Permanent_session_lifetime이 만료되면 무엇이 호출되는지 알고 계십니까?
ramu

5
before_request대신 여기 를 사용하는 이유는 무엇입니까 before_first_request?
srctaha

1
@srctaha 아마 사람들이 사이트를 방문 할 때마다 만료를 새로 고치고 싶을 것 같습니다
Tanky Woo

26

예, 설정해야합니다

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

그러나 나는 그것을 설정해야한다고 생각하지 않습니다 app.before_request.

permanent_session_lifetimeA는 기본 구성 이 앱을 구성에서 설정해야합니다, 그래서 :

 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/… 에서이 설정이 작동하지 않았습니다.
Kyle Bridenstine 2018 년

1
최신 버전에 대한 답변에서 링크 업데이트 : 기본 구성
Wavesailor

나는 방과 방송 등의 플라스크 세션을 위의 솔루션으로 사용하지만 나를 위해 작동하지 않았습니다. 5 분 후에 사용자가 직접 로그 아웃하고 로그인 페이지로 리디렉션 될 것으로 예상합니다. .... 영구 세션으로 가능합니까? 또는 db를 사용하고 로그인 날짜를 저장해야합니까?
sqp_125
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.