Có cách nào dễ dàng để tạo thời gian chờ phiên trong bình không?


83

Tôi đang xây dựng một trang web với flask nơi người dùng có tài khoản và có thể đăng nhập. Tôi đang sử dụng hiệu trưởng bình để một phần đăng nhập và quản lý vai trò. Có cách nào khiến phiên của người dùng hết hạn sau 5 phút hoặc 10 phút không? Tôi không thể tìm thấy điều đó trong tài liệu về bình hoặc tài liệu của hiệu trưởng bình.

Tôi đã nghĩ ra cách thực hiện thủ công, đặt một phía máy chủ có thể thay đổi với thẻ thời gian tại thời điểm đăng nhập và ở hành động tiếp theo mà người dùng thực hiện, máy chủ xác minh delta thời gian trên dấu thời gian đó và xóa phiên.


Bạn muốn phiên người dùng hết hạn sau 5 hoặc 10 phút không hoạt động hay đơn giản là hết hạn bất kể mức độ hoạt động?
codecool

vì không hoạt động, tôi sẽ phải thực hiện điều đó. chỉ hết hạn khi trình duyệt bị đóng hoặc 24 giờ. Nó không hết hạn ngay bây giờ.
verrochio

3
Để làm cho một phiên hết hạn liên quan đến hoạt động: stackoverflow.com/questions/19760486/…
zengr

Câu trả lời:


122

phiên flask sẽ hết hạn sau khi bạn đóng trình duyệt trừ khi bạn có phiên cố định. Bạn có thể thử những cách sau:

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)

Theo mặc định trong Flask ,ermanent_session_lifetime được đặt thành 31 ngày.


14
Tôi tin rằng phiên của bạn sẽ được đặt lại nếu bạn thay đổi app.secret_keyvà khởi động lại máy chủ cũng đúng.
John

16
session.permermanent là Sai theo mặc định: flask.pocoo.org/docs/api/#flask.session.permosystem
Randy Syring

1
Bạn có biết điều gì sẽ được gọi khi thời gian vĩnh viễn hết hạn?
ramu

4
Lý do sử dụng before_requestở đây thay vì là before_first_requestgì?
srctaha

1
@srctaha Tôi nghĩ có lẽ anh ấy muốn làm mới thời gian hết hạn mỗi khi mọi người truy cập trang web
Tanky Woo

25

Có, Chúng ta nên đặt

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

Nhưng tôi không nghĩ rằng nó nên được đặt ở app.before_request, Điều này sẽ dẫn đến việc đặt chúng cũng có thể đôi khi.

Các permanent_session_lifetimeCấu hình Cơ bản , vì vậy nó sẽ được đặt khi bạn định cấu hình ứng dụng:

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

Ý sessionchí được tạo cho từng khách hàng, tách biệt với các khách hàng khác. Vì vậy, tôi nghĩ nơi tốt nhất để đặt session.permanentlà khi bạn login():

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

Đối với Apache-Airflow (sử dụng Flask), cài đặt này trong github.com/apache/incubator-airflow/blob/master/airflow/contrib/… không hoạt động đối với tôi.
Kyle Bridenstine

1
Cập nhật liên kết trong câu trả lời lên phiên bản mới nhất: Cấu hình cơ bản
Wavesailor

Tôi sử dụng phiên flask với các phòng và phát sóng, v.v. giải pháp trên không hoạt động với tôi. Tôi mong đợi rằng sau 5 phút người dùng được đăng xuất trực tiếp và được chuyển hướng đến trang đăng nhập .... điều này có thể xảy ra với phiên vĩnh viễn không? hoặc Tôi có phải đạt được điều này bằng cách sử dụng db và lưu trữ ngày đăng nhập không?
sqp_125
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.