फ्लास्क में सत्र मध्यांतर बनाने का एक आसान तरीका है?


85

मैं फ्लास्क के साथ एक वेबसाइट का निर्माण कर रहा हूँ जहाँ उपयोगकर्ताओं के खाते हैं और लॉगिन करने में सक्षम हैं। मैं भाग और भूमिका प्रबंधन में लॉगिंग के लिए फ्लास्क-प्रिंसिपल का उपयोग कर रहा हूं। क्या 5 मिनट या 10 मिनट के बाद उपयोगकर्ता के सत्र को समाप्त करने का एक तरीका है? मैं यह नहीं पा रहा था कि फ्लास्क डॉक्यूमेंटेशन में या फ्लास्क-प्रिंसिपल के डॉक्यूमेंटेशन में।

मैंने इसे हाथ से करने का एक तरीका सोचा, लॉगिन के क्षण में एक टाइम टैग के साथ एक चर सर्वर-साइड सेट किया और उपयोगकर्ता द्वारा की जाने वाली अगली कार्रवाई में, सर्वर उस टाइमस्टैम्प पर समय-डेल्टा की पुष्टि करता है और सत्र को हटा देता है।


क्या आप 5 या 10 मिनट की निष्क्रियता के बाद उपयोगकर्ता सत्र समाप्त करना चाहते हैं या बस गतिविधि स्तर के बावजूद समाप्त हो सकते हैं?
13

निष्क्रियता के लिए मुझे उस पर अमल करना होगा। बस जब ब्राउज़र बंद हो जाए, या 24 घंटे समाप्त हो जाए। यह अभी समाप्त नहीं होता है।
वेरोचियो

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)

डिफ़ॉल्ट रूप से फ्लास्क में, permanent_session_lifetime 31 दिनों के लिए सेट है।


14
मेरा मानना ​​है कि यह भी सच है कि यदि आप अपना app.secret_keyसर्वर बदलते हैं और सर्वर को पुनरारंभ करते हैं तो आपका सत्र रीसेट हो जाएगा ।
जॉन

16
session.permanent डिफ़ॉल्ट रूप से गलत है: flask.pocoo.org/docs/api/#flask.session.permanent
Randy Syring

1
क्या आप जानते हैं कि जब स्थायी_session_lifetime समाप्त हो जाता है तो क्या कहा जाता है?
रामू

5
before_requestइसके बजाय यहाँ उपयोग करने का क्या कारण है before_first_request?
श्रीकठ

1
@srctaha मुझे लगता है कि शायद वह हर बार लोगों को साइट पर जाने के लिए एक्सपायर को रिफ्रेश करना चाहता है
टंकी वू

26

हां, हमें सेट करना चाहिए

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

अपाचे-एयरफ़्लो (जो फ्लास्क का उपयोग करता है) के लिए इसे github.com/apache/incubator-airflow/blob/master/airflow/contrib/… में सेट करना मेरे लिए कारगर नहीं था।
काइल ब्रिडेनस्टाइन

1
नवीनतम संस्करण के उत्तर में लिंक को अपडेट करें: मूल बातें विन्यास
वेवसैलर

मैं समाधान के ऊपर कमरे और प्रसारण आदि के साथ फ्लास्क सत्र का उपयोग करता हूं, हालांकि मेरे लिए काम नहीं किया। मुझे उम्मीद है कि 5min के बाद उपयोगकर्ता को सीधे लॉग आउट किया जाता है और लॉगिन पेज पर पुनः निर्देशित किया जाता है .... क्या यह स्थायी सत्र के साथ संभव है? या क्या मुझे db का उपयोग करके और लॉगिन तिथि को संग्रहीत करने के लिए इसे प्राप्त करना है?
sqp_125
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.