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 Headers
和Response Headers
並觀察它們的變化,發現登陸后在Request Headers
的Cookie
中多了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進行訪問限制的,需要什么功能都是直接搜來用的,一直覺得在會話這款應該比較難理解和學習,沒想到這么簡單,希望對大家有所幫助,如有不對指出,還請指正,謝謝。
每次瀏覽器關閉后再次打開就需要重新登陸,這似乎並不好,接下來學習如果在本地保存登陸狀態。