在開始今天的文章前,我們要先了解甚麼是Cookie。
Cookie 是存儲在客戶端瀏覽器的一小段文本信息,他的基本結構是由名稱(Name)值(Value)及其他屬性例如過期時間組成的,它可以在用戶本地保存狀態信息,例如用戶身份、購物車商品等。
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 假設驗證成功
if username == 'johndoe' and password == 'secret':
response = make_response(redirect(url_for('dashboard')))
response.set_cookie('session_id', '1234567890abcdef')
return response
return '''
<form method="post">
用戶名: <input type="text" name="username"><br>
密碼: <input type="password" name="password"><br>
<input type="submit" value="登入">
</form>
'''
@app.route('/dashboard')
def dashboard():
session_id = request.cookies.get('session_id')
if session_id == '1234567890abcdef':
return '歡迎來到儀表板,您的會話 ID 是有效的!'
else:
return '未經授權的訪問!'
伺服器接收到請求後,讀取並驗證 session_id Cookie。如果 Cookie 有效,返回儀表板頁面;如果無效,返回未授權的訪問信息。
在Flask我們可以透過使用make_respone()
函數來從視圖函數的返回值中獲得響應對象,之後可以使用響應對象的set_cookie
來設置Cookie。
下面有一個簡單範例
from flask import Flask,make_response
app = Flask(__name__)
@app.route('/')
def index():
resp = make_response('success')
resp.set_cookie('username', 'rrrrrrrrrrrr')
return resp
if __name__ == '__main__':
app.run(debug = True)
我們先來看一下網頁效果
接著我們來看一下是不是cookie是不是有設定成功
再來我們來看一下程式碼吧
resp = make_response('success')
我們透過make_response()
函數生成一個新的響應對象resp。裡面先封裝了一個字符串'success'作為響應體。resp
上調用set_cookie()
方法,來設定一個Cookie。這裡設定了一個名為'username',值為'rrrrrrrrrrr'的Cookie。這樣當瀏覽器接收到響應後,就會根據Set-Cookie頭部信息,在本地保存一個名為username,值為rrrrrrrrrrr的Cookie。
除了剛剛看到的key跟value他其實還有很多可以設定的
參數 | 說明 |
---|---|
key | cookie的鍵 |
value | cookie的值 |
max_age | cookie被保存的時間,單位為秒 |
expores | 具體的過期時間 |
path | 限制cookie只在指定的路徑可用,默認為全部可用 |
domain | 設置cookie可用的域名可用,默認是當前域名 |
secure | 如果設為True,只有HTTPS可以用 |
當我們能夠設定Cookie後我們也比須能夠取得Cookie的值吧!
我們可以透過訪問request對象的cookies屬性來訪問客戶單提交的Cookie訊息,Flask會將客戶端所有Cookie解析到request.cookies中,其中存儲格式為字典。
我們可以通過cookies字典的鍵來訪問單個Cookie。
接著我們在剛剛的程式碼中再加入下面的三行,不要忘了在最前面的import
中多引入一個request
喔
from flask import Flask,make_response,request
@app.route('/profile')
def profile():
username = request.cookies.get('username')
return username
接著我們來看一下網頁效果吧
接著我們來試試看怎麼刪除Cookie,這個應該不用多說甚麼了吧(?
我們新增這幾行程式碼
@app.route('/del')
def delete():
resp = make_response('del success')
resp.delete_cookie('username')
return resp
訪問localhost:5000/del
來看看是不是成功清除了username
了。
可以看到username不見了,這樣就是已經成功刪除了喔!