HTTP是基于TCP來實現(xiàn)的,而單獨(dú)拿出一個TCP連接,服務(wù)器也沒辦法確定這個TCP連接是哪個客戶端發(fā)起的(一個IP可以有多個客戶端)。所以,當(dāng)服務(wù)器需要知道連接發(fā)起的客戶端時,就需要客戶端來主動告訴服務(wù)器自己是誰。這動作聽上去很簡單,但是客戶端只是瀏覽器而已。瀏覽器如果要告訴服務(wù)器自己是誰就必須先記住自己是誰。如果沒有這個記憶功能,自己都不知道自己是誰那服務(wù)器就更無法確定。所以,這時候就需要引入儲存數(shù)據(jù)的功能。
在Cookie被提出以前,HTTP只是用來做簡單的HTML數(shù)據(jù)傳輸用的。自從有了Cookie之后,HTTP是腰不酸了腿不疼了,一口氣上五樓不費(fèi)勁兒。以至于普及到現(xiàn)在這種程度。Cookie的作用就是讓客戶端擁有記憶的能力,訪問服務(wù)器是可以對服務(wù)器做個自我介紹??蛻舳松螩ookie也不會平白無故的就出現(xiàn)了,通常是在訪問了服務(wù)器之后服務(wù)器給客戶端設(shè)置的。Cookie是在HTTP頭中傳輸?shù)?,如果非要糾結(jié)這個,我們就去找個HTTP頭來圍觀下。下面這個是一個“未經(jīng)人事”的客戶端去訪問百度之后得到的HTTP響應(yīng)頭。
HTTP/1.1 200 OK
Date: Wed, 05 Dec 2012 13:56:32 GMT
Server: BWS/1.0
Content-Length: 4015
Content-Type: text/html;charset=gbk
Cache-Control: private
Expires: Wed, 05 Dec 2012 13:56:32 GMT
Content-Encoding: gzip
Set-Cookie: BAIDUID=07EBE84757CE914EF14ABF072B76405E:FG=1; expires=Wed, 05-Dec-42 13:56:32 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Connection: Keep-Alive
其它部分無視掉,只看倒數(shù)第三行的Set-Cookie,這就是服務(wù)器傳輸給客戶端的Cookie??蛻舳耸盏竭@個之后就會分析這個Cookie。Cookie其實不像我們想的那么簡單,一個Cookie包含著許多信息。比如上面百度傳過來的Cookie就由4個部分組成。第一個是名稱=值,這是Cookie最基本的東西它是一個Cookie必須的,沒有它后面對這個Cookie設(shè)置的參數(shù)也就沒意義了。接著是:過期時間、路徑、域名。Cookie是保存在本地的,也就是說即使關(guān)閉了瀏覽器Cookie也不會消失,但是這樣就會讓Cookie的數(shù)量只加不減而產(chǎn)生冗余,所以Cookie是有時效性的。Cookie在客戶端只會被保存到過期時間為止,超過那個時間就會刪除掉。如果服務(wù)器設(shè)置Cookie的時候沒定義過期時間,那么這個Cookie就會在瀏覽器關(guān)閉時被刪除。Cookie的作用域未必是一個域名,也可以是域名下的某個目錄,所以需要用路徑來指定哪個頁面,百度使用了“/”說明是在首頁上的。首頁上的Cookie才是整個域名都可以使用的。最后還可以指定域名,這是因為,域名通常還包含子域,每個子域都是單獨(dú)的一個域。而Cookie是不能被跨域訪問的,這是當(dāng)然。想想看,要是可以跨域訪問會有什么后果(那我訪問的XXX網(wǎng)站不全被你們知道了←_←)。百度這個Cookie是被設(shè)置到根域上的,和路徑一樣的道理,根域的Cookie在所有子域都是可以被使用的。這個域名和路徑也不是必要參數(shù),如果服務(wù)器沒定義就會使用當(dāng)前頁面的域名和路徑。
像Cookie這樣在網(wǎng)絡(luò)上傳來傳去的東西當(dāng)然不安全,如果保存用戶的機(jī)密信息也這樣肆無忌憚就很容易泄漏。所以我們的前輩們想出了一個辦法,那就是把機(jī)密信息留在服務(wù)器不傳給客戶端,只給客戶端留下一串標(biāo)識符。這個方法就是我們耳熟能詳?shù)腟ession了,服務(wù)器傳給客戶端的標(biāo)識符就稱為SessionID。就像上面百度那個例子一樣,BAIDUID的值我們是無法從中獲取到什么信息的??蛻舳丝梢酝ㄟ^這個標(biāo)識符告訴服務(wù)器哪一方機(jī)密信息是屬于它的,需要做的處理都在服務(wù)器上完成,這樣安全性就大大增加。現(xiàn)在主流的后端開發(fā)語言都支持Session,但是他們的支持方式和支持程度各不相同。不過有一個共同點(diǎn),Session在服務(wù)器上保存的用戶數(shù)據(jù)也是有時效性的,過了某個時間這個Session保存的數(shù)據(jù)就會失效。一般把這個Session保存的數(shù)據(jù)的失效時間和SessionID的失效時間設(shè)置成一樣的。但是服務(wù)器是開發(fā)者自己來配置的,偶爾也會不同。這種情況它倆中任何一個過了失效時間都意味著這個Session失效。所以,談?wù)揝ession失效時間的時候是使用SessionID和Session在服務(wù)器端保存的數(shù)據(jù)失效時間中較小的那一個。
雖然Session的安全性比Cookie高許多,但是這還是不夠安全,因為別人可以竊取用戶的SessionID冒充客戶端向服務(wù)器請求一些機(jī)密信息。這就是傳說中的XSS漏洞。前面說的Cookie禁止跨域問題就是因為這個。不僅是Cookie禁止跨域,除了一些特定的HTML標(biāo)簽外,客戶端上的Web程序都是禁止跨域的。因為,只要不允許跨域,Cookie就不會在訪問別的網(wǎng)站時泄漏。當(dāng)然,如果你的電腦本身中毒了,那就真沒辦法了。瀏覽器對跨域的限制這么嚴(yán)格當(dāng)然也會帶來一些其它問題,所以跨域這個東西本身在Web前端中也是一個值得研究的課題,這里就不細(xì)說了。
新聞名稱:Cookie和Session的作用
文章鏈接:http://m.rwnh.cn/news13/310113.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、定制開發(fā)、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、商城網(wǎng)站、做網(wǎng)站
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)