1. 程式人生 > 實用技巧 >Flask學習第17天:Flask-cookie

Flask學習第17天:Flask-cookie

一、基本概念

cookie:在網站中http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie出現就是為了解決這個問題,第一次登入後伺服器返回一些資料(cookie)給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會把上次請求儲存的cookie資料自動的攜帶給伺服器,伺服器通過瀏覽器攜帶的資料就能判斷當前是哪個使用者了。cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4kb。因此使用cookie只能儲存一些小量的資料。

session:session和cookie的作用有點類似,都是為了儲存使用者相關的資訊。不同的是cookie是儲存在本地瀏覽器,而session儲存在伺服器。儲存在伺服器的資料會更加安全,不容易被竊取。但儲存在伺服器也有一定的弊端,就是會佔用伺服器的資源。

cookie和session結合使用:cookie和session的使用已經出現了一些非常成熟的方案。一般有兩種儲存方式

  • 儲存在服務端:通過cookie儲存一個session_id,然後具體的資料則儲存在session中。如果使用者已經登入,則伺服器會在cookie中儲存一個session_id,下次再請求的時候,會把該session_id攜帶上,伺服器根據session_id在sesson庫中獲取使用者的session資料。就能知道該使用者到底是誰,以及之前儲存的一些狀態資訊。這種專業術語叫做 server side session.
  • 將session資料加密,然後儲存在cookie中。這種專業術語叫做 client side session。flask採用的就是這種方式,但是也可以替換成其它方式。

二、Flask設定和刪除cookie

1、設定cookie

設定cookie應該在Response的物件上設定, flask.Response物件有一個set_cookie方法,可以通過這個方法來設定cookie資訊。

  • key:鍵
  • value:值
  • max_age:設定過期時間(秒)
  • expires:設定過期時間,時間戳的形式(1970離現在的時間)
  • path:當前主域名
  • domain:子域名
  • secure: 如果為True,則要使用https
  • httponly: 是否允許JS訪問cookie,預設為Flase,表示允許,這是一個擴充套件的cookie標準,可能不支援所有瀏覽器
  • samesite: 限制cookie 的範圍

瀏覽器訪問首頁,按F12,檢視cookie

2、刪除cookie

通過Response.delete_cookie方法,指定cookie的key,就可以刪除cookie了。

三、設定cookie的有效期

* max_age:以秒為單位,距離現在多少秒後cookie會過期。
* expires:為datetime型別。這個時間需要設定為格林尼治時間,也就是要距離北京少8個小時的時間。
* 如果max_age和expires都設定了,那麼這時候以max_age為標準。
* max_age在IE8以下的瀏覽器是不支援的。expires雖然在新版的HTTP協議中是被廢棄了,但是到目前為止,所有的瀏覽器都還是能夠支援,所以如果想要相容IE8以下的瀏覽器,那麼應該使用expires,否則可以使用max_age。
* 預設的過期時間:如果沒有顯示的指定過期時間,那麼這個cookie將會在瀏覽器關閉後過期。

from flask import Flask,request,Response

app = Flask(__name__)
@app.route('/')
def hello_world():
    resp = Response("設定cookie")
    # 1.使用expires引數,就必須使用格林尼治時間
    # 通過expires引數設定有效期的時候,就要相對北京時間少8個小時,所有這裡hours是16,
    # 如果直接days=31,就不準確了
    expires = datetime.now() + timedelta(days=30,hours=16)
    resp.set_cookie('username','derek',expires=expires)
    
    # 2.使用max_age引數設定過期時間(1分鐘後後期)
    # resp.set_cookie('username','derek',max_age=60)
    return resp

四、設定cookie的有效域名

flask如何配置子域名請 進入子域名配置

cookie預設是隻能在主域名下使用。如果想要在子域名下使用,那麼應該給`set_cookie`傳遞一個`domain='.heboan.com'`,這樣其他子域名才能訪問到這個cookie資訊。

轉載:https://www.cnblogs.com/sellsa/p/9354569.html