首頁 > 軟體

Flask 入門系列 Cookie與session的介紹

2021-11-25 19:00:52

一、Cookie的使用

1、什麼是Cookie

我們都知道,HTTP 協定是無狀態的,也就是說,在一次請求響應結束後,伺服器端不會保留任何對方狀態的資訊,對於某些需要保留的資訊,可以通過 Cookie 技術來完成,通過在請求和響應報文中新增 Cookie 資料來儲存使用者端的狀態資訊。

Web 伺服器為了儲存某些資料(比如使用者資訊) 而儲存在瀏覽器上的小型文字資料,瀏覽器會在一定時間內儲存它,在下次向該伺服器傳送請求時附帶這些資料,Cookie 通常被用來進行使用者對談管理(比如使用者的登入狀態),儲存使用者的一些資訊。

2、在Flask中使用Cookie

Flask 中,如果想要在響應中新增一個 cookie,可以使用 response 物件的set_cookie()方法。

set_ cookie()方法的引數如下:

  • keycookie 鍵名
  • valuecookie
  • max_agecookie 被儲存的時間,單位:秒
  • expires:具體的過期時間
  • path:限制 cookie 可用的路徑,預設為整個域名
  • domaincookie 可用的域名
  • secure:設定為 True,只有通過 HTTPS 才可使用
  • httponly:設定為True,禁止使用者端 js 獲取 cookie

具體使用如下:

@app.route('user/<name>')

def user(name):

    response = make_response('hello {}'.format(name), 200)

    response.set_cookie("name", name)

    return response

Flask 中,Cookie 可以通過 request 請求物件 cookies 屬性獲取。

@app.route('/hello')

def hello():

    user = request.args.get('name')

    if not user:

        user = request.cookies.get("name", 'default')

    return 'Hello {}!'.format(user)

二、session的使用

1、什麼是session

session 指使用者對談,對談可以用來儲存當前請求的一些狀態,以便於在請求之前共用資訊。session是儲存在伺服器端的,通過唯一標識區分使用者 session,即 session id,一般情況下,session id 是存在 Cookie 中的,伺服器端可以獲取 Cookie 中的 session id 來獲取使用者 session

2、Flask中的session物件

我們瞭解了 Cookie 最重要的功能是用來儲存使用者端使用者的狀態資訊。但是存在這樣一個問題,Cookie 是儲存在使用者端的,在瀏覽器中可以輕易的新增和修改 Cookie,而且如果把使用者的狀態資訊以明文的方式儲存在 Cookie 裡的話,那麼就可以通過偽造 Cookie 資訊來偽造別人的使用者資訊,從而獲取一些許可權。為了避免這個問題,我們要對敏感的 Cookie 內容進行加密。Flask 提供了 session 物件就是用來將 Cookie 資料加密儲存的。

3、在Flask中使用session

session 需要通過金鑰對資料進行簽名以加密資料,因此,需要先設定一個金鑰app.secret_key,這裡設定的金鑰只是一個簡單範例,在生產環境中,必須要隨機生成的金鑰,保證祕鑰的複雜度度和隨機性,才更安全。

# 設定金鑰

app.secret_key = 'qwertyuiop'

@app.route('/user', methods=['POST', 'GET'])

def user():

    if request.method == 'POST':

        user = request.form['user_name']

        session['user_name'] = request.form['user_name']

        return 'Hello {}!'.format(user)

    else:

        if 'user_name' in session:

            return 'Hello {}!'.format(session["user_name"])

session 物件的使用就跟字典一樣,如上,使用者使用POST請求登入後,在 session 中儲存使用者名稱,下次再使用GET請求時,不傳遞任何資訊,也可以在 session 中獲取該使用者的資訊。

想要清除 session 指定資訊的話,例如使用者名稱,可以使用 session.pop("user_name", None),清除全部的話可以使用session.clear()

到此這篇關於 Flask 入門系列 Cookie與session的介紹的文章就介紹到這了,更多相關 Flask  Cookie與session內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com