天天看點

Pythonweb架構中的setcookie究竟做了什麼?session與cookie關系

用python web架構的同學都知道 ,在使用例如 django,flask,tornado等這些web架構的時候,都有已經為大家封裝好了的 setcookie的方法。那麼這個方法究竟做了什麼。可能有些新人朋友并不能很好的了解。那麼今天dewei就帶着大家剖析一下,這些web架構裡的類似 setcookie的方法(名字可能各不相同),究竟做了什麼?

首先大家知道,在一個http請求中,至少包含兩個結構,1是headers,請求的頭資訊,裡邊包含發起者的一些資訊和一些附帶的自定義資訊;2是body 請求傳輸的資料。那麼在headers中,有一個key 叫做 "Set-Cookie",當web伺服器的請求response傳回浏覽器端的時候,如果 這個response的headers中包含“Set-Cookie”,那麼浏覽器就認為有要種植到cookie裡的鍵值對。那麼這個“Set-Cookie”的結構如何呢?我們在進一步和大家讨論。

Pythonweb架構中的setcookie究竟做了什麼?session與cookie關系

我們知道了headers中有一個“Set-Cookie” 他是一個鍵值對,那麼值就是要存儲的cookie資訊。那麼我們先來寫一個demo,根據demo 我們來解釋他們分别是什麼。

"Set-Cookie": "token=xxxxx;Domain=xxxxx;Path=/;Expires=GMT"

好。我們看上邊的例子,有一個setcookie,他的value是一個字元串,那麼大家和我從前往後看:token=xxxxx 是我們要存入cookies裡的鍵值對,domain是你要将這個鍵值對存入哪個域名下,比如 www.abc.com; 那麼當存在這個域名下之後,隻有在這個域下才可以看到這個cookie資訊,path是具體顯示在這個域名下的哪個path,一般就在根就好了,最後的是expires是一個該鍵值對的過期時間,這個時間,是一個GMT時間(要加8小時喲)。當然還有其他的參數,比如httponly,隻有設定這個cookie的後端才可以擷取和修改,max-age 他是一個有效期按照秒來計算的,一般和expires有一個存在就可以了。這裡邊有一個坑在于,設定時間的時候,有的架構是給一個datetime,有的是給一個秒,都不一樣,但如果從原始狀态設定的時候,是要設定 GMT時間的。這裡要注意下。另外這裡每個參數之間用 “;”隔開,那麼 那些web架構裡的類似setcookie就是将你傳進去的參數封裝好後放入headers中~更多的一些參數可以檢視 這裡

最後我們再來說一說session,對于session 大家第一個了解的内容普遍(初級)是:它存在伺服器端。沒有錯,他的最終的value的确存在服務端,但其實session和cookie也有着重要的牽絆。當生成一個session的時候,會生成一個key:value,比如 session_12138:uidxxxxx 這是一個鍵值對。但實際上他依然會種一個cookie到浏覽器,類似這樣的鍵值對 session_token: session_12138 。大家有沒有發現什麼?這個cookie裡的value 實際上就是 伺服器端的 key,是以 通過cookie取出 session的key,在通過key取得session最終的結果。這就是session與cookie的關系~有的新人朋友,對這裡了解不是非常透徹,今天解釋一下相關的流程,希望對大家有所幫助~