Cookie和Session的作用

2023-12-24    分類: 網(wǎng)站建設(shè)

  HTTP是基于TCP來(lái)實(shí)現(xiàn)的,而單獨(dú)拿出一個(gè)TCP連接,服務(wù)器也沒(méi)辦法確定這個(gè)TCP連接是哪個(gè)客戶端發(fā)起的(一個(gè)IP可以有多個(gè)客戶端)。所以,當(dāng)服務(wù)器需要知道連接發(fā)起的客戶端時(shí),就需要客戶端來(lái)主動(dòng)告訴服務(wù)器自己是誰(shuí)。這動(dòng)作聽(tīng)上去很簡(jiǎn)單,但是客戶端只是瀏覽器而已。瀏覽器如果要告訴服務(wù)器自己是誰(shuí)就必須先記住自己是誰(shuí)。如果沒(méi)有這個(gè)記憶功能,自己都不知道自己是誰(shuí)那服務(wù)器就更無(wú)法確定。所以,這時(shí)候就需要引入儲(chǔ)存數(shù)據(jù)的功能。 在Cookie被提出以前,HTTP只是用來(lái)做簡(jiǎn)單的HTML數(shù)據(jù)傳輸用的。自從有了Cookie之后,HTTP是腰不酸了腿不疼了,一口氣上五樓不費(fèi)勁兒。以至于普及到現(xiàn)在這種程度。Cookie的作用就是讓客戶端擁有記憶的能力,訪問(wèn)服務(wù)器是可以對(duì)服務(wù)器做個(gè)自我介紹??蛻舳松螩ookie也不會(huì)平白無(wú)故的就出現(xiàn)了,通常是在訪問(wèn)了服務(wù)器之后服務(wù)器給客戶端設(shè)置的。Cookie是在HTTP頭中傳輸?shù)?,如果非要糾結(jié)這個(gè),我們就去找個(gè)HTTP頭來(lái)圍觀下。下面這個(gè)是一個(gè)“未經(jīng)人事”的客戶端去訪問(wèn)百度之后得到的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 其它部分無(wú)視掉,只看倒數(shù)第三行的Set-Cookie,這就是服務(wù)器傳輸給客戶端的Cookie??蛻舳耸盏竭@個(gè)之后就會(huì)分析這個(gè)Cookie。Cookie其實(shí)不像我們想的那么簡(jiǎn)單,一個(gè)Cookie包含著許多信息。比如上面百度傳過(guò)來(lái)的Cookie就由4個(gè)部分組成。第一個(gè)是名稱=值,這是Cookie最基本的東西它是一個(gè)Cookie必須的,沒(méi)有它后面對(duì)這個(gè)Cookie設(shè)置的參數(shù)也就沒(méi)意義了。接著是:過(guò)期時(shí)間、路徑、域名。Cookie是保存在本地的,也就是說(shuō)即使關(guān)閉了瀏覽器Cookie也不會(huì)消失,但是這樣就會(huì)讓Cookie的數(shù)量只加不減而產(chǎn)生冗余,所以Cookie是有時(shí)效性的。Cookie在客戶端只會(huì)被保存到過(guò)期時(shí)間為止,超過(guò)那個(gè)時(shí)間就會(huì)刪除掉。如果服務(wù)器設(shè)置Cookie的時(shí)候沒(méi)定義過(guò)期時(shí)間,那么這個(gè)Cookie就會(huì)在瀏覽器關(guān)閉時(shí)被刪除。Cookie的作用域未必是一個(gè)域名,也可以是域名下的某個(gè)目錄,所以需要用路徑來(lái)指定哪個(gè)頁(yè)面,百度使用了“/”說(shuō)明是在首頁(yè)上的。首頁(yè)上的Cookie才是整個(gè)域名都可以使用的。最后還可以指定域名,這是因?yàn)椋蛎ǔ_€包含子域,每個(gè)子域都是單獨(dú)的一個(gè)域。而Cookie是不能被跨域訪問(wèn)的,這是當(dāng)然。想想看,要是可以跨域訪問(wèn)會(huì)有什么后果(那我訪問(wèn)的XXX網(wǎng)站不全被你們知道了←_←)。百度這個(gè)Cookie是被設(shè)置到根域上的,和路徑一樣的道理,根域的Cookie在所有子域都是可以被使用的。這個(gè)域名和路徑也不是必要參數(shù),如果服務(wù)器沒(méi)定義就會(huì)使用當(dāng)前頁(yè)面的域名和路徑。 像Cookie這樣在網(wǎng)絡(luò)上傳來(lái)傳去的東西當(dāng)然不安全,如果保存用戶的機(jī)密信息也這樣肆無(wú)忌憚就很容易泄漏。所以我們的前輩們想出了一個(gè)辦法,那就是把機(jī)密信息留在服務(wù)器不傳給客戶端,只給客戶端留下一串標(biāo)識(shí)符。這個(gè)方法就是我們耳熟能詳?shù)腟ession了,服務(wù)器傳給客戶端的標(biāo)識(shí)符就稱為SessionID。就像上面百度那個(gè)例子一樣,BAIDUID的值我們是無(wú)法從中獲取到什么信息的。客戶端可以通過(guò)這個(gè)標(biāo)識(shí)符告訴服務(wù)器哪一方機(jī)密信息是屬于它的,需要做的處理都在服務(wù)器上完成,這樣安全性就大大增加?,F(xiàn)在主流的后端開(kāi)發(fā)語(yǔ)言都支持Session,但是他們的支持方式和支持程度各不相同。不過(guò)有一個(gè)共同點(diǎn),Session在服務(wù)器上保存的用戶數(shù)據(jù)也是有時(shí)效性的,過(guò)了某個(gè)時(shí)間這個(gè)Session保存的數(shù)據(jù)就會(huì)失效。一般把這個(gè)Session保存的數(shù)據(jù)的失效時(shí)間和SessionID的失效時(shí)間設(shè)置成一樣的。但是服務(wù)器是開(kāi)發(fā)者自己來(lái)配置的,偶爾也會(huì)不同。這種情況它倆中任何一個(gè)過(guò)了失效時(shí)間都意味著這個(gè)Session失效。所以,談?wù)揝ession失效時(shí)間的時(shí)候是使用SessionID和Session在服務(wù)器端保存的數(shù)據(jù)失效時(shí)間中較小的那一個(gè)。 雖然Session的安全性比Cookie高許多,但是這還是不夠安全,因?yàn)閯e人可以竊取用戶的SessionID冒充客戶端向服務(wù)器請(qǐng)求一些機(jī)密信息。這就是傳說(shuō)中的XSS漏洞。前面說(shuō)的Cookie禁止跨域問(wèn)題就是因?yàn)檫@個(gè)。不僅是Cookie禁止跨域,除了一些特定的HTML標(biāo)簽外,客戶端上的Web程序都是禁止跨域的。因?yàn)椋灰辉试S跨域,Cookie就不會(huì)在訪問(wèn)別的網(wǎng)站時(shí)泄漏。當(dāng)然,如果你的電腦本身中毒了,那就真沒(méi)辦法了。瀏覽器對(duì)跨域的限制這么嚴(yán)格當(dāng)然也會(huì)帶來(lái)一些其它問(wèn)題,所以跨域這個(gè)東西本身在Web前端中也是一個(gè)值得研究的課題,這里就不細(xì)說(shuō)了。

新聞名稱:Cookie和Session的作用
文章鏈接:http://www.bm7419.com/news13/310113.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、定制開(kāi)發(fā)品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、商城網(wǎng)站、做網(wǎng)站

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)