一、 含義
Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區發展的一種機制,目前Cookie已經成為標準,所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie,
由于HTTP是一種無狀態的協議,服務器單從網路連接上無從知道客戶身份,怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證,這樣服務器就能從通行證上確認客戶身份了,這就是Cookie的作業原理,
Cookie實際上是一小段的文本資訊,客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie,客戶端瀏覽器會把Cookie保存起來,當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器,服務器檢查該Cookie,以此來辨認用戶狀態,所以Cookie是客戶端技術,
Session可以理解為一個抽象概念,即會話,會話用于記錄一個用戶在我們網站上的一些行為、一些狀態,可以理解為一個背景關系,這些用戶狀態可以利用Cookie中的Session ID來標識,
在另外的一些語境下,Session又可以指在后臺保存用戶狀態來實作會話的方式,它把用戶狀態存盤在后臺的記憶體、資料庫等介質中,然后我們利用請求的Cookie中保存的Session ID來為這個請求找到它對應的會話,
Session是服務器端技術,服務器在運行時可以為每一個用戶的瀏覽器創建一個其獨享的Session物件,由于Session為用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的資料放在各自的Session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的Session中取出資料為用戶服務,
二、有效時長:
Cookie的maxAge決定著Cookie的有效期,單位為秒,
如果maxAge屬性為正數,則表示該Cookie會在maxAge秒之后自動失效,瀏覽器會將maxAge為正數的Cookie持久化,即寫到對應的Cookie檔案中,無論客戶關閉了瀏覽器還是電腦,只要還在maxAge秒之前,登錄網站時該Cookie仍然有效,下面代碼中的Cookie資訊將永遠有效,
如果maxAge為負數,則表示該Cookie僅在本瀏覽器視窗以及本視窗打開的子視窗內有效,關閉視窗后該Cookie即失效,maxAge為負數的Cookie,為臨時性Cookie,不會被持久化,不會被寫到Cookie檔案中,Cookie資訊保存在瀏覽器記憶體中,因此關閉瀏覽器該Cookie就消失了,Cookie默認的maxAge值為–1,
如果maxAge為0,則表示洗掉該Cookie,Cookie機制沒有提供洗掉Cookie的方法,因此通過設定該Cookie即時失效實作洗掉Cookie的效果,失效的Cookie會被瀏覽器從Cookie檔案或者記憶體中洗掉,
由于會有越來越多的用戶訪問服務器,因此Session也會越來越多,為防止記憶體溢位,服務器會把長時間內沒有活躍的Session從記憶體洗掉,這個時間就是Session的超時時間,如果超過了超時時間沒訪問過服務器,Session就自動失效了,
三、面試中可能會遇到的問題點
- Session 在服務器端,Cookie 在客戶端(瀏覽器)
- Session 默認被存在在服務器的一個檔案里(不是記憶體)
- Session 的運行依賴 Session id,而 Session id 是存在 Cookie 中的,也就是說,如果瀏覽器禁用了 Cookie ,同時 Session 也會失效(但是可以通過其它方式實作,比如在 url 中傳遞 Session_id)
- Session 可以放在 檔案、資料庫、或記憶體中都可以,
- Cookie具有不可跨域名性
四、在反爬技術中的應用
在一些網站中,需要用戶以個人資訊登陸上去才能看到更多的資訊,如果利用爬蟲程式模擬人登陸的行為,主要有以下三種:
-
代碼里通過request.post里的引數data中,包含自己的用戶名和密碼,但是這樣及其不安全
-
訪問頁面的時候打開開發者工具,從header是中找到cookie并復制,寫到python腳本里的headers中,這種方法的問題就是上文提到了Cookie是有時效性的,這種方法需要手動替換比較麻煩,也不推薦,
-
通過session方法,后續使用類比于request.get 、request.post 等,最推薦的一種方法,代碼如下:
data = https://www.cnblogs.com/djdjdj123/archive/2022/12/26/{"name": "填寫用戶名",
"passwd": "填寫登陸密碼"
}
# python學習交流群:711312441
# 通過session模擬登錄,每次請求帶著session
s = requests.Session()
f = s.post(url, data=https://www.cnblogs.com/djdjdj123/archive/2022/12/26/data, headers=headers)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540722.html
標籤:其他
上一篇:利用Python自動生成請假條
