爬蟲基礎(chǔ) - 會(huì)話和Cookies

在瀏覽網(wǎng)站的過程中丘侠,我們經(jīng)常會(huì)遇到需要登錄的情況,有些頁(yè)面只有登錄之后才可以訪問,而且登錄之后可以連續(xù)訪問很多次網(wǎng)站缺亮,但是有時(shí)候過一段時(shí)間就需要重新登錄。這涉及到會(huì)話(Session)和Cookies的相關(guān)知識(shí)。

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

<!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代碼萌踱,我們將其保存為一個(gè).html文件葵礼,然后把它放在某臺(tái)具有固定公網(wǎng)IP的主機(jī),主機(jī)上裝上Apache或Nginx等服務(wù)器并鸵,這樣這臺(tái)主機(jī)就可以作為服務(wù)器了鸳粉,其他人便可以通過訪問服務(wù)器看到這個(gè)頁(yè)面,這就搭建了一個(gè)最簡(jiǎn)單的網(wǎng)站园担。
這種網(wǎng)頁(yè)的內(nèi)容是HTML代碼編寫的届谈,文字、圖片等內(nèi)容均通過寫好的HTML代碼來指定弯汰,這種頁(yè)面叫作靜態(tài)網(wǎng)頁(yè)艰山。它加載速度快,編寫簡(jiǎn)單咏闪,但是存在很大的缺陷曙搬,如可維護(hù)性差,不能根據(jù)URL靈活多變地顯示內(nèi)容等鸽嫂。例如纵装,我們想要給這個(gè)網(wǎng)頁(yè)的URL傳入一個(gè)name參數(shù),讓其在網(wǎng)頁(yè)中顯示出來据某,是無法做到的橡娄。
因此,動(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ǔ)言編寫的,其功能比靜態(tài)網(wǎng)頁(yè)強(qiáng)大和豐富太多了楞遏。
此外動(dòng)態(tài)網(wǎng)站還可以實(shí)現(xiàn)用戶登錄和注冊(cè)的功能茬暇。按照一般的邏輯來說,輸入用戶名和密碼登錄之后寡喝,肯定是拿到了一種類似憑證的東西糙俗,有了它,我們才能保持登錄狀態(tài)预鬓,才能訪問登錄之后才能看到的頁(yè)面巧骚。

無狀態(tài)HTTP

HTTP的無狀態(tài)是指HTTP協(xié)議對(duì)事務(wù)處理是沒有記憶能力的,也就是說服務(wù)器不知道客戶端是什么狀態(tài)。當(dāng)我們向服務(wù)器發(fā)送請(qǐng)求后劈彪,服務(wù)器解析此請(qǐng)求竣蹦,然后返回對(duì)應(yīng)的響應(yīng),服務(wù)器負(fù)責(zé)完成這個(gè)過程沧奴,而且這個(gè)過程是完全獨(dú)立的痘括,服務(wù)器不會(huì)記錄前后狀態(tài)的變化,也就是缺少狀態(tài)記錄滔吠。這就意味著如果后續(xù)需要處理前面的信息纲菌,則必須重傳,這導(dǎo)致需要額外傳遞一些前面的重復(fù)請(qǐng)求屠凶,才能湖區(qū)后續(xù)響應(yīng)驰后,然后這種效果顯然不是我們想要的。為了保持前后狀態(tài)矗愧,我們肯定不能講前面的請(qǐng)求全部重傳一次灶芝,這太浪費(fèi)資源了,對(duì)于這種需要用戶登錄的頁(yè)面來說唉韭,更是棘手夜涕。
這時(shí)兩個(gè)用于保持HTTP連接狀態(tài)的技術(shù)就出現(xiàn)了,它們分別是會(huì)話和Cookies属愤。會(huì)話在服務(wù)端女器,也就是網(wǎng)站的服務(wù)器,用來保存用戶的會(huì)話信息住诸;Cookies在客戶端密幔,也可以理解為瀏覽器端回懦,有了Cookies惠爽,瀏覽器再下次訪問頁(yè)面時(shí)會(huì)自動(dòng)附帶上它發(fā)送給服務(wù)器届惋,服務(wù)器通過識(shí)別Cookies并鑒定出哪個(gè)用戶,然后再判斷用戶是否是登錄狀態(tài)奄薇,然后返回對(duì)應(yīng)的響應(yīng)驳阎。
因此在爬蟲中,有時(shí)候處理需要登錄才能訪問的頁(yè)面時(shí)馁蒂,我們一般會(huì)直接將登錄成功后獲取的Cookies放在請(qǐng)求頭里面直接請(qǐng)求呵晚,而不必重新模擬登錄。

會(huì)話

會(huì)話沫屡,其本來的含義是指有始有終的一系列動(dòng)作/消息饵隙。比如,打電話時(shí)沮脖,從拿起電話撥號(hào)到掛斷電話這中間的額一系列過程可以成為一個(gè)會(huì)話癞季。
而在Web中劫瞳,會(huì)話對(duì)象用來存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。這樣绷柒,當(dāng)用戶在應(yīng)用程序的Web頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在會(huì)話對(duì)象中的變量將不會(huì)丟失涮因,而是在整個(gè)用戶會(huì)話中一直存在下去废睦。當(dāng)用戶請(qǐng)求來自應(yīng)用程序的Web頁(yè),如果該用戶還沒有會(huì)話养泡,則Web服務(wù)器將自動(dòng)創(chuàng)建一個(gè)會(huì)話對(duì)象嗜湃。當(dāng)會(huì)話過期或被放棄后,服務(wù)器將終止該會(huì)話澜掩。

Cookies

Cookies指某些網(wǎng)站為了辨別用戶身份购披、進(jìn)行會(huì)話跟蹤而存儲(chǔ)在用戶本地終端上的數(shù)據(jù)。

會(huì)話維持

當(dāng)客戶端第一次請(qǐng)求服務(wù)器時(shí)肩榕,服務(wù)器會(huì)返回一個(gè)請(qǐng)求頭中帶有Set-Cookie字段的響應(yīng)給客戶端刚陡,用來標(biāo)記是哪一個(gè)用戶,客戶端瀏覽器會(huì)把Cookies保存起來株汉。當(dāng)瀏覽器下一次再請(qǐng)求該網(wǎng)站時(shí)筐乳,瀏覽器會(huì)把此Cookies放到請(qǐng)求頭一起提交給服務(wù)器,Cookies攜帶了會(huì)話ID信息乔妈,服務(wù)器檢查該Cookies即可找到對(duì)應(yīng)的會(huì)話是什么蝙云,然后再判斷會(huì)話來以此來辨認(rèn)用戶狀態(tài)。
在成功登錄某個(gè)網(wǎng)站時(shí)路召,服務(wù)器會(huì)告訴客戶端設(shè)置哪些Cookies信息勃刨,在后續(xù)訪問頁(yè)面時(shí)客戶端會(huì)把Cookies發(fā)送給服務(wù)器,服務(wù)器再找到對(duì)應(yīng)的會(huì)話加以判斷股淡。如果會(huì)話中的某些設(shè)置登錄狀態(tài)的變量是有效的身隐,那就證明用戶處于登錄狀態(tài),此時(shí)返回登錄之后才可以查看的網(wǎng)頁(yè)內(nèi)容揣非,瀏覽器再進(jìn)行解析便可以看到了抡医。
所以,Cookies和會(huì)話需要配合早敬,一個(gè)處于客戶端忌傻,一個(gè)處于服務(wù)端,二者共同協(xié)作搞监,就實(shí)現(xiàn)了登錄會(huì)話控制水孩。

屬性結(jié)構(gòu)
  • Name:該Cookie的名稱。一旦創(chuàng)建琐驴,該名稱便不可更改俘种。
  • Value:該Cookie的值秤标。如果值為Unicode字符,需要為字符編碼宙刘。如果值為二進(jìn)制數(shù)據(jù)苍姜,則需要使用BASE64編碼。
  • Domain:可以訪問該Cookie的域名悬包。例如衙猪,如果設(shè)置為.zhihu.com,則所有以zhihu.com結(jié)尾的域名都可以訪問該Cookie布近。
  • Max Age:該Cookie失效的時(shí)間垫释,單位為秒,也常和Expires一起使用撑瞧,通過它可以計(jì)算出其有效時(shí)間棵譬。Max Age如果為正數(shù),則該Cookie在Max Age之后失效预伺。如果為負(fù)數(shù)订咸,則關(guān)閉瀏覽器時(shí)Cookie即失效,瀏覽器也不會(huì)以任何形式保存該Cookie扭屁。
  • Path:該Cookie的使用路徑算谈。如果設(shè)置為/path/,則只有路徑為/path/的頁(yè)面可以訪問該Cookie料滥。如果設(shè)置為/然眼,則本域名下的所有頁(yè)面都可以訪問該Cookie。
  • Size字段:此Cookie的大小葵腹。
  • HTTP字段:Cookie的httponly屬性高每。若此屬性為true,則只有在HTTP頭中會(huì)帶有此Cookie的信息践宴,而不能通過document.cookie來訪問此Cookie鲸匿。
  • Secure:該Cookie是否僅被使用安全協(xié)議傳輸。安全協(xié)議有HTTPS和SSL等阻肩,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密带欢。默認(rèn)為false。
會(huì)話Cookie和持久Cookie

從表面意思來說烤惊,會(huì)話Cookie就是把Cookie放在瀏覽器內(nèi)存里乔煞,瀏覽器再關(guān)閉之后該Cookie即失效;持久Cookie會(huì)保存到客戶端的硬盤中柒室,下次還可以繼續(xù)使用渡贾,用于長(zhǎng)久保持用戶登錄狀態(tài)。
其實(shí)嚴(yán)格來說雄右,沒有會(huì)話Cookie和持久Cookie之分空骚,只有由Cookie的Max Age或Expires字段決定了過期的時(shí)間纺讲。
因此,一些持久化登錄的網(wǎng)站其實(shí)就是把Cookie的有效時(shí)間和會(huì)話有效期設(shè)置得比較長(zhǎng)囤屹,下次我們?cè)僭L問頁(yè)面時(shí)仍然攜帶之前的Cookie熬甚,就可以直接保持登錄狀態(tài)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牺丙,一起剝皮案震驚了整個(gè)濱河市则涯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冲簿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亿昏,死亡現(xiàn)場(chǎng)離奇詭異峦剔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)角钩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門吝沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人递礼,你說我怎么就攤上這事惨险。” “怎么了脊髓?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辫愉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我将硝,道長(zhǎng)恭朗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任依疼,我火速辦了婚禮痰腮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘律罢。我一直安慰自己膀值,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布误辑。 她就那樣靜靜地躺著沧踏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稀余。 梳的紋絲不亂的頭發(fā)上悦冀,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音睛琳,去河邊找鬼盒蟆。 笑死踏烙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的历等。 我是一名探鬼主播讨惩,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寒屯!你這毒婦竟也來了荐捻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤寡夹,失蹤者是張志新(化名)和其女友劉穎处面,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菩掏,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魂角,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了智绸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片野揪。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧栗,靈堂內(nèi)的尸體忽然破棺而出斯稳,到底是詐尸還是另有隱情,我是刑警寧澤迹恐,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布挣惰,位于F島的核電站,受9級(jí)特大地震影響系草,放射性物質(zhì)發(fā)生泄漏通熄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一找都、第九天 我趴在偏房一處隱蔽的房頂上張望唇辨。 院中可真熱鬧,春花似錦能耻、人聲如沸赏枚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饿幅。三九已至,卻和暖如春戒职,著一層夾襖步出監(jiān)牢的瞬間栗恩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工洪燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留磕秤,地道東北人乳乌。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像市咆,于是被迫代替她去往敵國(guó)和親汉操。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 會(huì)話(Session)跟蹤是Web程序中常用的技術(shù)蒙兰,用來跟蹤用戶的整個(gè)會(huì)話磷瘤。常用的會(huì)話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,617評(píng)論 1 49
  • HTTP基本原理 URI、URL搜变、URN(Uninform Resource) URI(Identifier):統(tǒng)...
    GHope閱讀 2,079評(píng)論 2 26
  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,942評(píng)論 7 186
  • GET和POST的區(qū)別前言實(shí)際上這個(gè)問題總是會(huì)被問道采缚,日常也常用到這兩種方法,知道使用的場(chǎng)景挠他,但是一直沒有好好總結(jié)...
    yeying12321閱讀 214評(píng)論 0 0
  • 剛剛加班回家赂苗,困意全無愉耙! 明天世界500強(qiáng)房企一個(gè)項(xiàng)目要開盤,陪他們加班到12點(diǎn)拌滋,非常幸運(yùn)看到她們?yōu)殚_盤做出的努力...
    梧桐雨兒閱讀 387評(píng)論 0 2