Flask session到期時間設置 用戶登錄與登出


flask版本 1.1.1

最近學習Flask開發,看官方文檔產生疑問,就是session有效期的問題,默認貌似是沒有有效期的,只有關閉瀏覽器session才會失效,其實控制session的有效期非常簡單,簡單到只需要添加兩行代碼就可以實現,先看看官方session的示例代碼。

官方文檔示例代碼

官方示例簡單明了的演示了session的使用,代碼一共為3個頁面,首頁、登陸和登出
訪問首頁時,如果用戶沒有登陸或者session到期時,會提示You are not logged in
訪問登陸頁時,如果是POST請求取出username保存到session中,並跳轉到首頁。
訪問登出頁面時,從session中移除username,並跳轉到首頁。

from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)

# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

@app.route('/')
def index():
    if 'username' in session:
        return 'Logged in as %s' % escape(session['username'])
    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''

@app.route('/logout')
def logout():
    # remove the username from the session if it's there
    session.pop('username', None)
    return redirect(url_for('index'))

if __name__ == "__main__":
    app.run()

把上面的代碼保存起來運行,用瀏覽器訪問各個功能,按F12鍵,查看Request HeadersResponse Headers並觀察它們的變化,發現登陸后在Request HeadersCookie中多了session=xxx,這是因為我們在login視圖函數中將用戶提交的username保存在session

怎么設置session的到期時間呢

設置到期時間

login視圖函數中添加以下兩行代碼

...
...
def login():   
    session.permanent = True
    app.permanent_session_lifetime = timedelta(minutes=1) # 設置session到期時間
    ...
...

設置到期時間后,在到期后會提示需要登錄,在session到期前刷新瀏覽器,會重新計算session的到期時間

在學習之前,有使用flask_restful開發過一個簡單的API,是通過Token進行訪問限制的,需要什么功能都是直接搜來用的,一直覺得在會話這款應該比較難理解和學習,沒想到這么簡單,希望對大家有所幫助,如有不對指出,還請指正,謝謝。

每次瀏覽器關閉后再次打開就需要重新登陸,這似乎並不好,接下來學習如果在本地保存登陸狀態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM