成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---18、Session和Cookies

SHERlocked93 / 1875人閱讀

摘要:而在中對(duì)象用來(lái)存儲(chǔ)特定用戶(hù)會(huì)話所需的屬性及配置信息。當(dāng)會(huì)話過(guò)期或被放棄后,服務(wù)器將終止該會(huì)話。,即該是否僅被使用安全協(xié)議傳輸。安全協(xié)議有,等,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密。

上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---17、爬蟲(chóng)基本原理
下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---19、代理基本原理

在瀏覽網(wǎng)站的過(guò)程中我們經(jīng)常會(huì)遇到需要登錄的情況,有些頁(yè)面只有登錄之后我們才可以訪問(wèn),而且登錄之后可以連續(xù)訪問(wèn)很多次網(wǎng)站,但是有時(shí)候過(guò)一段時(shí)間就會(huì)需要重新登錄。還有一些網(wǎng)站有時(shí)在我們打開(kāi)瀏覽器的時(shí)候就自動(dòng)登錄了,而且很長(zhǎng)的時(shí)間都不會(huì)失效,這種情況又是為什么?其實(shí)這里面涉及到 Session 和 Cookies 的相關(guān)知識(shí),本節(jié)我們就來(lái)揭開(kāi)它們的神秘面紗。

1. 靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)

在開(kāi)始之前我們需要先了解一下靜態(tài)網(wǎng)頁(yè)和動(dòng)態(tài)網(wǎng)頁(yè)的概念。
還是前文中的示例代碼,內(nèi)容如下:



    
        
        This is a Demo
    
    
        

Hello World

Hello, this is a paragraph.

這是最基本的 HTML 代碼,我們將其保存為一個(gè) html 文件,然后把它放在某臺(tái)具有固定公網(wǎng) IP 的主機(jī)上,主機(jī)上裝上 Apache 或 Nginx 等服務(wù)器,這樣這臺(tái)主機(jī)就可以作為服務(wù)器了,其他人便可以通過(guò)訪問(wèn)服務(wù)器看到這個(gè)頁(yè)面了,這就搭建了一個(gè)最簡(jiǎn)單的網(wǎng)站。
這種網(wǎng)頁(yè)的內(nèi)容是 HTML 代碼編寫(xiě)的,文字、圖片等內(nèi)容均是通過(guò)寫(xiě)好的 HTML 代碼來(lái)指定的,這種頁(yè)面叫做靜態(tài)網(wǎng)頁(yè)。
這種網(wǎng)頁(yè)加載速度快,編寫(xiě)簡(jiǎn)單,但是存在很大的缺陷,如可維護(hù)性差,不能根據(jù) URL 靈活多變地顯示內(nèi)容等,例如我們想要給這個(gè)網(wǎng)頁(yè)的 URL 傳入一個(gè) name 參數(shù),讓其在網(wǎng)頁(yè)中顯示出來(lái),是無(wú)法做到的。
所以動(dòng)態(tài)網(wǎng)頁(yè)應(yīng)運(yùn)而生,它可以動(dòng)態(tài)解析 URL 中參數(shù)的變化,關(guān)聯(lián)數(shù)據(jù)庫(kù)并動(dòng)態(tài)地呈現(xiàn)不同的頁(yè)面內(nèi)容,非常靈活多變,我們現(xiàn)在遇到的大多數(shù)網(wǎng)站都是動(dòng)態(tài)網(wǎng)站,它們不再是一個(gè)簡(jiǎn)單的 HTML,而是可能由 JSP、PHP、Python 等語(yǔ)言編寫(xiě)的,功能相比靜態(tài)網(wǎng)頁(yè)強(qiáng)大和豐富太多太多。
動(dòng)態(tài)網(wǎng)站還可以實(shí)現(xiàn)用戶(hù)登錄注冊(cè)的功能,再回到開(kāi)篇提到的問(wèn)題,很多頁(yè)面是需要登錄之后才可以查看的,按照一般的邏輯來(lái)說(shuō),我們輸入用戶(hù)名密碼登錄之后,肯定是拿到了一種類(lèi)似憑證的東西,有了它我們才能保持登錄狀態(tài),才能訪問(wèn)登錄之后才能看到的頁(yè)面。
那么這種神秘的憑證到底是什么呢?其實(shí)它就是 Session 和 Cookies 共同產(chǎn)生的結(jié)果,下面我們來(lái)一探它們的究竟。

2. 無(wú)狀態(tài)HTTP

在了解 Session 和 Cookies 之前,我們還需要了解 HTTP 的一個(gè)特點(diǎn),叫做無(wú)狀態(tài)。
HTTP 的無(wú)狀態(tài)是指 HTTP 協(xié)議對(duì)事務(wù)處理是沒(méi)有記憶能力的,也就是說(shuō)服務(wù)器不知道客戶(hù)端是什么狀態(tài)。當(dāng)我們向服務(wù)器發(fā)送一個(gè) Requset 后,服務(wù)器解析此 Request,然后返回對(duì)應(yīng)的 Response,服務(wù)器負(fù)責(zé)完成這個(gè)過(guò)程,而且這個(gè)過(guò)程是完全獨(dú)立的,服務(wù)器不會(huì)記錄前后狀態(tài)的變化,也就是缺少狀態(tài)記錄,這意味著如果后續(xù)需要處理需要前面的信息,則它必須要重傳,這也導(dǎo)致了需要額外傳遞一些前面的重復(fù) Request 才能獲取后續(xù) Response,然而這種效果顯然不是我們想要的。為了保持前后狀態(tài),我們肯定不能將前面的請(qǐng)求全部重傳一次,這太浪費(fèi)資源了,對(duì)于這種需要用戶(hù)登錄的頁(yè)面來(lái)說(shuō),更是棘手。
所以,這時(shí)候,兩個(gè)用于保持 HTTP 連接狀態(tài)的技術(shù)就出現(xiàn)了,它們分別是 Session 和 Cookies,Session 在服務(wù)端,也就是網(wǎng)站的服務(wù)器,用來(lái)保存用戶(hù)的會(huì)話信息,Cookies 在客戶(hù)端,也可以理解為瀏覽器端,有了 Cookies,瀏覽器在下次訪問(wèn)網(wǎng)頁(yè)時(shí)會(huì)自動(dòng)附帶上它發(fā)送給服務(wù)器,服務(wù)器通過(guò)識(shí)別 Cookies 并鑒定出是哪個(gè)用戶(hù),然后再判斷用戶(hù)是否是登錄狀態(tài),然后返回對(duì)應(yīng)的 Response。
所以我們可以理解為 Cookies 里面保存了登錄的憑證,有了它我們只需要在下次請(qǐng)求攜帶 Cookies 發(fā)送 Request 而不必重新輸入用戶(hù)名、密碼等信息重新登錄了。
因此在爬蟲(chóng)中,有時(shí)候處理需要登錄才能訪問(wèn)的頁(yè)面時(shí),我們一般會(huì)直接將登錄成功后獲取的 Cookies 放在 Request Headers 里面直接請(qǐng)求,而不必重新模擬登錄。
好,大體了解什么是 Session 和 Cookies 之后,我們來(lái)詳細(xì)剖析一下它們的原理。

2. Session

Session,即會(huì)話,其本來(lái)的含義是指有始有終的一系列動(dòng)作/消息,比如打電話時(shí)從拿起電話撥號(hào)到掛斷電話這中間的一系列過(guò)程可以稱(chēng)之為一個(gè) Session。
而在 Web 中 Session 對(duì)象用來(lái)存儲(chǔ)特定用戶(hù)會(huì)話所需的屬性及配置信息。這樣,當(dāng)用戶(hù)在應(yīng)用程序的 Web 頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量將不會(huì)丟失,而是在整個(gè)用戶(hù)會(huì)話中一直存在下去。當(dāng)用戶(hù)請(qǐng)求來(lái)自應(yīng)用程序的 Web 頁(yè)時(shí),如果該用戶(hù)還沒(méi)有會(huì)話,則 Web 服務(wù)器將自動(dòng)創(chuàng)建一個(gè) Session 對(duì)象。當(dāng)會(huì)話過(guò)期或被放棄后,服務(wù)器將終止該會(huì)話。

3. Cookies

Cookie,有時(shí)也用其復(fù)數(shù)形式 Cookies,指某些網(wǎng)站為了辨別用戶(hù)身份、進(jìn)行 Session 跟蹤而儲(chǔ)存在用戶(hù)本地終端上的數(shù)據(jù)。

會(huì)話維持

那么利用 Cookies 我們是怎樣來(lái)保持狀態(tài)的呢?當(dāng)客戶(hù)端第一次請(qǐng)求服務(wù)器時(shí),服務(wù)器會(huì)返回一個(gè) Headers 中帶有 Set-Cookie 字段的 Response 給客戶(hù)端,用來(lái)標(biāo)記是哪一個(gè)用戶(hù),客戶(hù)端瀏覽器會(huì)把Cookies 保存起來(lái)。當(dāng)瀏覽器下一次再請(qǐng)求該網(wǎng)站時(shí),瀏覽器會(huì)把此Cookies 放到 Request Headers 一起提交給服務(wù)器,Cookies 攜帶了 Session ID 信息,服務(wù)器檢查該 Cookies 即可找到對(duì)應(yīng)的 Session 是什么,然后再判斷 Session 來(lái)以此來(lái)辨認(rèn)用戶(hù)狀態(tài)。
所以我們?cè)诘卿浤硞€(gè)網(wǎng)站的時(shí)候,登錄成功后服務(wù)器會(huì)告訴客戶(hù)端設(shè)置哪些 Cookies 信息,在后續(xù)訪問(wèn)頁(yè)面時(shí)客戶(hù)端會(huì)把 Cookies 發(fā)送給服務(wù)器,服務(wù)器再找到對(duì)應(yīng)的 Session 加以判斷,如果 Session 中的某些設(shè)置登錄狀態(tài)的變量是有效的,那就證明用戶(hù)是處于登錄狀態(tài)的,即可返回登錄之后才可以查看的網(wǎng)頁(yè)內(nèi)容,瀏覽器進(jìn)行解析便可以看到了。
反之,如果傳給服務(wù)器的 Cookies 是無(wú)效的,或者 Session 已經(jīng)過(guò)期了,我們將不能繼續(xù)訪問(wèn)頁(yè)面,可能會(huì)收到錯(cuò)誤的 Response 或者跳轉(zhuǎn)到登錄頁(yè)面重新登錄。
所以 Cookies 和 Session 需要配合,一個(gè)處于客戶(hù)端,一個(gè)處于服務(wù)端,二者共同協(xié)作,就實(shí)現(xiàn)了登錄會(huì)話控制。

屬性結(jié)構(gòu)

接下來(lái)我們來(lái)看看 Cookies 都有哪些內(nèi)容,在這里以知乎為例,在瀏覽器開(kāi)發(fā)者工具中打開(kāi) Application 選項(xiàng)卡,然后在左側(cè)會(huì)有一個(gè) Storage 部分,最后一項(xiàng)即為 Cookies,將其點(diǎn)開(kāi),可以看到類(lèi)似如下內(nèi)容,這些就是 Cookies,如圖 2-14 所示:

圖 2-14 Cookies 列表
我們可以看到 Cookies 有一個(gè)個(gè)條目,每個(gè)條目我們可以稱(chēng)之為 Cookie,取單數(shù)形式。它有這么幾個(gè)屬性:

Name,即該 Cookie 的名稱(chēng)。Cookie 一旦創(chuàng)建,名稱(chēng)便不可更改

Value,即該 Cookie 的值。如果值為 Unicode 字符,需要為字符編碼。如果值為二進(jìn)制數(shù)據(jù),則需要使用 BASE64 編碼

。Max Age,即該 Cookie 失效的時(shí)間,單位秒,也常和 Expires 一起使用,通過(guò)它可以計(jì)算出其有效時(shí)間。Max Age 如果為正數(shù),則該Cookie 在 Max Age 秒之后失效。如果為負(fù)數(shù),則關(guān)閉瀏覽器時(shí)Cookie 即失效,瀏覽器也不會(huì)以任何形式保存該 Cookie。 Path,即該 Cookie 的使用路徑。如果設(shè)置為 /path/,則只有路徑為 /path/ 的頁(yè)面可以訪問(wèn)該 Cookie。如果設(shè)置為 /,則本域名下的所有頁(yè)面都可以訪問(wèn)該 Cookie。

Domain,即可以訪問(wèn)該 Cookie 的域名。例如如果設(shè)置為 .zhihu.com,則所有以 zhihu.com,結(jié)尾的域名都可以訪問(wèn)該Cookie。

Size字段,即此 Cookie 的大小。

Http字段,即 Cookie 的 httponly 屬性。若此屬性為 true,則只有在 HTTP Headers 中會(huì)帶有此 Cookie 的信息,而不能通過(guò) document.cookie 來(lái)訪問(wèn)此 Cookie。

Secure,即該 Cookie 是否僅被使用安全協(xié)議傳輸。安全協(xié)議。安全協(xié)議有 HTTPS,SSL 等,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密。默認(rèn)為 false。以上便是 Cookies 的基本結(jié)構(gòu)。

會(huì)話Cookie、持久Cookie

表面意思來(lái)說(shuō),會(huì)話 Cookie 就是把 Cookie 放在瀏覽器內(nèi)存里,瀏覽器在關(guān)閉之后該 Cookie 即失效,持久 Cookie 則會(huì)保存到客戶(hù)端的硬盤(pán)中,下次還可以繼續(xù)使用,用于長(zhǎng)久保持用戶(hù)登錄狀態(tài)。
其實(shí)嚴(yán)格來(lái)說(shuō)沒(méi)有會(huì)話 Cookie 和持久 Cookie 之分,它只是由 Cookie 的 Max Age 或 Expires 字段決定了過(guò)期的時(shí)間,通過(guò)它瀏覽器可以計(jì)算出其有效時(shí)間。Max Age 如果為正數(shù),則該 Cookie 在 Max Age 秒之后失效,如果 Max Age 特別大,那就會(huì)保存非常長(zhǎng)的時(shí)間。如果為負(fù)數(shù),則關(guān)閉瀏覽器時(shí) Cookie 即失效,瀏覽器也不會(huì)以任何形式保存該 Cookie。
所以一些持久化登錄的網(wǎng)站其實(shí)就是把 Cookie 的有效時(shí)間和 Session 有效期設(shè)置得比較長(zhǎng),下次我們?cè)僭L問(wèn)頁(yè)面時(shí)仍然攜帶之前的 Cookies 就可以直接保持登錄狀態(tài)。

4. 常見(jiàn)誤區(qū)

在談?wù)?Session 機(jī)制的時(shí)候,常常聽(tīng)到這樣一種誤解“只要關(guān)閉瀏覽器,Session 就消失了”,這種理解是錯(cuò)誤的,可以想象一下會(huì)員卡的例子,除非顧客主動(dòng)對(duì)店家提出銷(xiāo)卡,否則店家絕對(duì)不會(huì)輕易刪除顧客的資料。對(duì) Session 來(lái)說(shuō)也是一樣的,除非程序通知服務(wù)器刪除一個(gè) Session,否則服務(wù)器會(huì)一直保留,比如程序一般都是在我們做注銷(xiāo)操作的時(shí)候才去刪除 Session。
但是當(dāng)我們關(guān)閉瀏覽器時(shí),瀏覽器不會(huì)主動(dòng)在關(guān)閉之前通知服務(wù)器它將要關(guān)閉,所以服務(wù)器根本不會(huì)有機(jī)會(huì)知道瀏覽器已經(jīng)關(guān)閉,之所以會(huì)有這種錯(cuò)覺(jué),是大部分 Session 機(jī)制都使用會(huì)話 Cookie 來(lái)保存 Session ID 信息,而關(guān)閉瀏覽器后 Cookies 就消失了,再次連接服務(wù)器時(shí)也就無(wú)法找到原來(lái)的 Session。如果服務(wù)器設(shè)置的 Cookies 被保存到硬盤(pán)上,或者使用某種手段改寫(xiě)瀏覽器發(fā)出的 HTTP 請(qǐng)求頭,把原來(lái)的 Cookies 發(fā)送給服務(wù)器,則再次打開(kāi)瀏覽器仍然能夠找到原來(lái)的 Session ID,依舊還是可以保持登錄狀態(tài)的。
而且恰恰是由于關(guān)閉瀏覽器不會(huì)導(dǎo)致 Session 被刪除,這就需要服務(wù)器為 Seesion 設(shè)置一個(gè)失效時(shí)間,當(dāng)距離客戶(hù)端上一次使用 Session 的時(shí)間超過(guò)這個(gè)失效時(shí)間時(shí),服務(wù)器就可以認(rèn)為客戶(hù)端已經(jīng)停止了活動(dòng),才會(huì)把 Session 刪除以節(jié)省存儲(chǔ)空間。

5. 參考資料

由于涉及到一些專(zhuān)業(yè)名詞知識(shí),本節(jié)的部分內(nèi)容參考來(lái)源如下:

Session 百度百科:https://baike.baidu.com/item/...

百度百科:https://baike.baidu.com/item/...

Cookie 維基百科:https://en.wikipedia.org/wiki...

Session和幾種狀態(tài)保持方案理解:http://www.mamicode.com/info-...

6.結(jié)語(yǔ)

本節(jié)介紹了 Session 和 Cookies 的基本知識(shí),后面我們可能會(huì)需要爬取一些需要登錄才可以訪問(wèn)的頁(yè)面,這里就需要用到 Cookies 的相關(guān)知識(shí),因此本節(jié)的內(nèi)容同樣需要好好掌握。

上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---17、爬蟲(chóng)基本原理
下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---19、代理基本原理

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44050.html

相關(guān)文章

  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---17、爬蟲(chóng)基本原理

    摘要:在前面我們講到了和的概念,我們向網(wǎng)站的服務(wù)器發(fā)送一個(gè),返回的的便是網(wǎng)頁(yè)源代碼。渲染頁(yè)面有時(shí)候我們?cè)谟没蜃ト【W(wǎng)頁(yè)時(shí),得到的源代碼實(shí)際和瀏覽器中看到的是不一樣的。所以使用基本請(qǐng)求庫(kù)得到的結(jié)果源代碼可能跟瀏覽器中的頁(yè)面源代碼不太一樣。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---16、Web網(wǎng)頁(yè)基礎(chǔ)下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---18、Session和Cookies 爬蟲(chóng),即網(wǎng)...

    hellowoody 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---19、代理基本原理

    摘要:所以使用代理隱藏真實(shí)的,讓服務(wù)器誤以為是代理服務(wù)器的在請(qǐng)求自己。參考來(lái)源由于涉及到一些專(zhuān)業(yè)名詞知識(shí),本節(jié)的部分內(nèi)容參考來(lái)源如下代理服務(wù)器維基百科代理百度百科上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)和下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)使用發(fā)送請(qǐng)求 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---18、Session和Cookies下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---20、使用Urllib:發(fā)送請(qǐng)求 我們?cè)谧雠老x(chóng)...

    gougoujiang 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---25、requests:高級(jí)用法

    摘要:比如我們以知乎為例,直接利用來(lái)維持登錄狀態(tài)。測(cè)試后,發(fā)現(xiàn)同樣可以正常登錄知乎。上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)基本使用下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)正則表達(dá)式 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---24、requests:基本使用下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---26、正則表達(dá)式 在前面一節(jié)我們了解了 Requests 的基本用法,如基本的 GET、POST 請(qǐng)求以及 Response...

    dingding199389 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---15、爬蟲(chóng)基礎(chǔ):HTTP基本原理

    摘要:上一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)部署相關(guān)庫(kù)的安裝下一篇文章網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)網(wǎng)頁(yè)基礎(chǔ)在寫(xiě)爬蟲(chóng)之前,還是需要了解一些爬蟲(chóng)的基礎(chǔ)知識(shí),如原理網(wǎng)頁(yè)的基礎(chǔ)知識(shí)爬蟲(chóng)的基本原理基本原理等。由萬(wàn)維網(wǎng)協(xié)會(huì)和工作小組共同合作制定的規(guī)范,目前廣泛使用的是版本。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---14、部署相關(guān)庫(kù)的安裝:Scrapyrt、Gerapy下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---16、Web網(wǎng)頁(yè)基礎(chǔ)...

    codeGoogle 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---20、使用Urllib:發(fā)送請(qǐng)求

    摘要:下面我們傳入多個(gè)參數(shù)構(gòu)建一個(gè)來(lái)感受一下在這里我們通過(guò)四個(gè)參數(shù)構(gòu)造了一個(gè),即請(qǐng)求,在中指定了和,傳遞的參數(shù)用了和方法來(lái)轉(zhuǎn)成字節(jié)流,另外指定了請(qǐng)求方式為。運(yùn)行結(jié)果如下通過(guò)觀察結(jié)果可以發(fā)現(xiàn),我們成功設(shè)置了,以及。用于處理重定向。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---19、代理基本原理下一篇文章:Python3網(wǎng)絡(luò)爬蟲(chóng)實(shí)戰(zhàn)---21、使用Urllib:處理異常 學(xué)習(xí)爬蟲(chóng),最初的操作便...

    kun_jian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<