W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
除請求對象之外,還有一個 session 對象。它允許你在不 同請求間存儲特定用戶的信息。它是在 Cookies 的基礎上實現(xiàn)的,并且對 Cookies 進行密鑰簽名。這意味著用戶可以查看你 Cookie 的內容,但卻不 能修改它,除非用戶知道簽名的密鑰。
要使用會話,你需要設置一個密鑰。這里介紹會話如何工作:
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
@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 action="" 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'))
# set the secret key. keep this really secret:
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
這里提到的 escape() 可以在你模板引擎外做轉義(如同本例)。
如何生成強壯的密鑰
隨機的問題在于很難判斷什么是真隨機。一個密鑰應該足夠隨機。你的操作 系統(tǒng)可以基于一個密鑰隨機生成器來生成漂亮的隨機值,這個值可以用來做 密鑰:
>>> import os
>>> os.urandom(24)
'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
把這個值復制粘貼進你的代碼中,你就有了密鑰。
使用基于 cookie 的會話需注意: Flask 會將你放進會話對象的值序列化至 Cookies。如果你發(fā)現(xiàn)某些值在請求之間并沒有持久存在,然而確實已經(jīng)啟用了 Cookies,但也沒有得到明確的錯誤信息。這時,請檢查你的頁面響應中的 Cookies 的大小,并與 Web 瀏覽器所支持的大小對比。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: