Flask-1-05-Cookie&Session

接下來我會演示一下設置Cookie 讀取Cookie 刪除Cookie,以及添加Cookie的原理

 接下來咱們分別定義3個視圖爲 set_cookie、get_cookie、del_cookie

# coding:utf-8

from flask import Flask, make_response, request

app = Flask(__name__)

@app.route("/set_cookie")
def set_cookie():
    # 建立一個響應的對象
    resp = make_response('設置成功')
    # 設置cookie
    resp.set_cookie('username1', 'hannibal')
    # 設置多個cookie
    resp.set_cookie('username2', 'circle')
    # 默認的有效期是關閉瀏覽器以前 max_age 是手動添加有效期 單位是妙
    resp.set_cookie('username3', 'benjamin', max_age=3600)
    return resp


@app.route("/get_cookie")
def get_cookie():
    c = request.cookies.get('username1')
    return c


@app.route('/del_cookie')
def del_cookie():
  # 刪除Cookie的時候也須要先建立響應對象 resp
= make_response('del cookie') resp.delete_cookie('username3') return resp if __name__ == '__main__': app.run(host='0.0.0.0', debug=True)

經過返回結果咱們能夠看出:設置了3個Cookie

若是不指定過時時間默認是會話結束時候

一樣咱們這裏還有設置了一個過時時間爲1小時(3600)

當咱們訪問get_cookie時

 

當咱們刪除Cookie時,經過結果能夠看出,並無在瀏覽器真正的刪除了username3這個Cookie,而是幫咱們把過時時間更改成了建立時間。顯然這麼作也是足夠的

經過上面的返回信息,咱們能夠看出,其實就是經過設置Cookie就是在響應頭裏給咱們添加了一條數據而已

其實咱們就能夠在響應頭裏本身添加一個Set-Cookie 這個鍵 而且按照他的格式給它賦值,原理就是這麼個原理

resp.headers["Set-Cookie"] = "username3=benjamin; Expires=Tue, 23-Jul-2019 09:49:51 GMT; Max-Age=3600; Path=/"

 

 

Session

session對象。它容許你在不一樣請求間存儲特定用戶的信息。它是在 Cookies 的基礎上實現的,而且對 Cookies 進行密鑰簽名。這意味着用戶能夠查看你 Cookie 的內容,但卻不能修改它,除非用戶知道簽名的密鑰。flask

若是你想用有一個看都看不懂的密鑰,還不想本身一頓亂敲,你能夠經過Python的編譯器作一個密鑰生成器好比下面的那個方法:

>>> import os
>>> os.urandom(24)
'u\x8a\r\x9b\x89\xad7//\xd6\x9a\x19\t\xdb3A\x92\xbaCN\xee\xc8x-'

把這個值複製粘貼進你的代碼中,你就有了強壯並且看似專業的密鑰

下面將用一個簡單的例子來了解session的基本應用方法:

# coding:utf-8
from flask import Flask, session, redirect, url_for, escape, request
import sys

reload(sys)
sys.setdefaultencoding('utf8')

app = Flask(__name__)
# 設置密鑰 這個是必需要有的不然會拋出一個RuntimeError
app.config['SECRET_KEY'] = 'u\x8a\r\x9b\x89\xad7//\xd6\x9a\x19\t\xdb3A\x92\xbaCN\xee\xc8x-'


@app.route('/')
def index():
    if 'username' in session:
        print(session['username'])
        return '歡迎 %s 登錄' % escape(session['username'])
    return '抱歉你尚未登錄'


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        # 重定向到index頁面
        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():
    # 若是有就將它刪除
    session.pop('username', None)
    return redirect(url_for('index'))


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

當你訪問127.0.0.1:5000/logout就會幫你刪除那個session

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息