【Python爬蟲】—— Session 與 Cookies

靜態網頁和動態網頁


靜態網頁
<!DOCTYPE html>
<html> 
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body> 
<div id="container">
<div class="wrapper">
<h2 class="title"> Hello World</h2>
<p class="text">Hello,this is a paragraph.</p>
</div>
</div>
</body>
</html> 

這種網頁內容由 HTML 代碼編寫,文字、圖片等內容均通過寫好的 HTML 代碼來指定,頁面叫作靜態網頁,加載速度快,編寫簡單。

但存在很大的缺陷,如可維護性差,不能根據URL靈活多變地顯示內容等。因此,動態網頁應運而生,它可以動態解析 URL 中參數的變化,關聯數據庫並動態呈現不同的頁面內容,非常靈活多變。

而現在遇到的大多數網站都是動態網站,不再是一個簡單的 HTML,可能是由 JSP、PHP、 Python 等語言編寫的,其功能比靜態網頁強大和豐富太多。動態網站還可以實現用戶登錄和註冊的功能


無狀態HTTP

HTTP特點之一 —— 無狀態
是指 HTTP 協議對事務處理是沒有記憶能力的,也就是說服務器不知道客戶端是什麼狀態,意味着如果後續需要處理前面的信息,則必須重傳,這也導致需要額外傳遞一些前面的重複請求,才能獲取後續響應。


Session

在服務端(網站的服務器)
用來保存用戶的 Session 信息

Session(會話) 本身的含義是指有始有終的一系列動作 / 消息。比如打電話時,從拿起電話撥號到掛斷電話這中間的一系列過程可以稱爲一個 Session,在 Web 中,Session 對象用來存儲特定用戶 Session 所需的屬性及配置信息。

Cookies

在客戶端(可以理解爲瀏覽器端)
瀏覽器在下次訪問網頁時會自動附帶上
它發送給服務器,服務器通過識別 Cookies 並鑑定出是哪個用戶,然後再判斷用戶是否是登錄狀態,進而返回對應的響應。

Cookies 指某些網站爲了辨別用戶身份、進行 Session 跟蹤而存儲在用戶本地終端上的數據。


當客戶端第一次請求服務器時
服務器會返回一個響應頭中帶有 Set-Cookie 字段的響應給客戶端,用來標記是哪一個用戶,客戶端瀏覽器會把 Cookies 保存起來。

當瀏覽器下一次再請求該網站時
瀏覽器會把此 Cookies 放到請求頭一起提交給服務器
Cookies 攜帶了 Session ID 信息,服務器檢查 Cookies 即可找到對應的 Session 是什麼,然後判斷 Session 以此來辨認用戶狀態。

在成功登錄某個網站時
服務器會告訴客戶端設置哪些 Cookies 信息,在後續訪問頁面時客戶端會把 Cookies 發送給服務器,服務器再找到對應的 Session 加以判斷。如果 Session 中的某些設置登錄狀態的變量是有效的,就證明用戶處於登錄狀態。
此時返回登錄之後纔可以查看的網頁內容,瀏覽器再進行解析便可以看到了。


Session(在服務端)、Cookies(在客戶端),二者共同協作,實現了登錄 Session 控制。

Cookies

會話 Cookie 就是把 Cookie 放在瀏覽器內存裏,瀏覽器在關閉之後該 Cookie 即失效。
持久 Cookie 則會保存到客戶端的硬盤中,下次還可以繼續使用,用於長久保持用戶登錄狀態。

實際上,沒有會話 Cookie 和持久 Cookie 之分,只是由 Cookie 的 Max Age 或 Expires 字段決定了過期的時間。


在談論 Session 機制時,常聽到這樣一種誤解 —— “只要關閉瀏覽器,Session 就消失了”。對Session來說,除非程序通知服務器刪除一個 Session,否則服務器會一直保留,比如程序一般都是在我們做註銷操作時纔去刪除 Session。當關閉瀏覽器時,瀏覽器不會主動在關閉之前通知服務器它將要關閉,所以服務器根本不會有機會知道瀏覽器已經關閉。

由於關閉瀏覽器不會導致 Session 被刪除,這就需要服務器爲 Session 設置一個失效時間,當距離客戶端上一次使用 Session 的時間超過這個失效時間時,服務器就可以認爲客戶端已經停止了活動,纔會把 Session 刪除以節省存儲空間。


Reference:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=46#/detail/pc?id=1665

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章