Flask 會(huì)話

2021-08-10 11:45 更新

除請(qǐng)求對(duì)象之外,還有一個(gè) session 對(duì)象。它允許你在不 同請(qǐng)求間存儲(chǔ)特定用戶的信息。它是在 Cookies 的基礎(chǔ)上實(shí)現(xiàn)的,并且對(duì) Cookies 進(jìn)行密鑰簽名。這意味著用戶可以查看你 Cookie 的內(nèi)容,但卻不 能修改它,除非用戶知道簽名的密鑰。

要使用會(huì)話,你需要設(shè)置一個(gè)密鑰。這里介紹會(huì)話如何工作:

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() 可以在你模板引擎外做轉(zhuǎn)義(如同本例)。

如何生成強(qiáng)壯的密鑰

隨機(jī)的問(wèn)題在于很難判斷什么是真隨機(jī)。一個(gè)密鑰應(yīng)該足夠隨機(jī)。你的操作 系統(tǒng)可以基于一個(gè)密鑰隨機(jī)生成器來(lái)生成漂亮的隨機(jī)值,這個(gè)值可以用來(lái)做 密鑰:

>>> import os
>>> os.urandom(24)
'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

把這個(gè)值復(fù)制粘貼進(jìn)你的代碼中,你就有了密鑰。

使用基于 cookie 的會(huì)話需注意: Flask 會(huì)將你放進(jìn)會(huì)話對(duì)象的值序列化至 Cookies。如果你發(fā)現(xiàn)某些值在請(qǐng)求之間并沒(méi)有持久存在,然而確實(shí)已經(jīng)啟用了 Cookies,但也沒(méi)有得到明確的錯(cuò)誤信息。這時(shí),請(qǐng)檢查你的頁(yè)面響應(yīng)中的 Cookies 的大小,并與 Web 瀏覽器所支持的大小對(duì)比。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)