合肥市高新區(qū)長(zhǎng)江西路與科學(xué)大道交口5F創(chuàng)業(yè)園A座309
136 5560 1775

詳細(xì)分析Session和Cookie的區(qū)別

發(fā)表日期:2014-05-24 瀏覽次數(shù):1960次

詳細(xì)分析Session和Cookie的區(qū)別

 

一 cookie簡(jiǎn)介

因特網(wǎng)的Cookie技術(shù)極其簡(jiǎn)單,卻有著旺盛的生命力。Cookie開(kāi)始引起眾人的注意是從2000年二月份隨著網(wǎng)絡(luò)隱私權(quán)的提出開(kāi)始的,有關(guān)的辯論至今仍在繼續(xù)。從另一方面來(lái)說(shuō),Cookie使得瀏覽網(wǎng)頁(yè)更容易了。幾乎所有的主要的網(wǎng)站設(shè)計(jì)者都使用了Cookie,因?yàn)樗麄兿霝闉g覽網(wǎng)站的人提供一個(gè)更好的瀏覽環(huán)境,同時(shí)也能更加準(zhǔn)確地收集訪(fǎng)客的信息。

家頗有影響的報(bào)紙上曾刊登了一篇很有深度的關(guān)于網(wǎng)絡(luò)隱私的文章,上面對(duì)于Cookie的定義是這樣的:

“Cookie是Web網(wǎng)站放在您的硬盤(pán)上的程序。它守在您的電腦里,搜集您的信息以及您在因特網(wǎng)上所做的任何事情,當(dāng)Web站點(diǎn)需要的時(shí)候它能夠下載所有這些搜集到的信息。”

像這樣的定義在報(bào)刊中相當(dāng)普遍。問(wèn)題是,它的定義犯了很大的錯(cuò)誤。Cookie不是程序,而且它不能像程序一樣地運(yùn)行,所以它無(wú)法為自己搜集任何信息。它也不能從您的電腦上取得您的任何個(gè)人資料。

Cookie的比較確切的定義應(yīng)該是這個(gè)樣子:

“Cookie是Web服務(wù)器保存在用戶(hù)硬盤(pán)上的一段文本。Cookie允許一個(gè)Web站點(diǎn)在用戶(hù)的電腦上保存信息并且隨后再取回它。信息的片斷以‘名/值’對(duì)(name-valuepairs)的形式儲(chǔ)存?!?/P>

舉例來(lái)說(shuō),一個(gè)Web站點(diǎn)可能會(huì)為每一個(gè)訪(fǎng)問(wèn)者產(chǎn)生一個(gè)唯一的ID,然后以Cookie文件的形式保存在每個(gè)用戶(hù)的機(jī)器上。

如果您使用IE瀏覽器訪(fǎng)問(wèn)Web,您會(huì)看到所有保存在您的硬盤(pán)上的Cookie。它們最常存放的地方是:c:windowscookies(在Win2000中則是C:DocumentsandSettings您的用戶(hù)名Cookies——作者注)。在我的機(jī)器上共有165個(gè)文件。每一個(gè)文件都是一個(gè)由“名/值”對(duì)組成的文本文件,另外還有一個(gè)文件保存有所有對(duì)應(yīng)的Web站點(diǎn)的信息。

在這個(gè)文件夾里的每個(gè)Cookie文件都是一個(gè)簡(jiǎn)單而又普通的文本文件。透過(guò)文件名,您可以看到是哪個(gè)Web站點(diǎn)在您的機(jī)器上放置了Cookie(當(dāng)然站點(diǎn)信息在文件里也有保存)。您也能雙擊打開(kāi)每一個(gè)Cookie文件。

比如,我訪(fǎng)問(wèn)了goto.com,而且這個(gè)站點(diǎn)在我的電腦上放了個(gè)Cookie。goto.com的Cookie文件包含了這樣的內(nèi)容:

UserIDA9A3BECE0563982Dwww.goto.com/

goto.com在我的電腦上存入了一個(gè)單一的“名/值”對(duì)?!懊?值”對(duì)的“名”是UserID,“值”是A9A3BECE0563982D。在我第一次訪(fǎng)問(wèn)goto.com的時(shí)候,該網(wǎng)站為我分配了一個(gè)唯一的ID并存在我的電腦里。

(注:除了上面舉例的“名/值”對(duì),可能會(huì)有其它的“名/值”對(duì)同時(shí)保存下來(lái)。那是瀏覽器的一些內(nèi)部信息,一般用戶(hù)不必多做了解。)

Amazon.com在我的電腦上保存了稍稍多一些的信息。當(dāng)我查看Amazon在我的電腦上建立的Cookie文件時(shí),它包含以下內(nèi)容:

session-id-time954242000amazon.com/
session-id002-4135256-7625846amazon.com/
x-maineKQIfwnxuF7qtmX52x6VWAXh@Ih6Uo5Hamazon.com/
ubid-main077-9263437-9645324amazon.com/

以上內(nèi)容顯示出Amazon存儲(chǔ)了一個(gè)主用戶(hù)IDubid-main,一個(gè)標(biāo)記每次任務(wù)的IDsession-id及任務(wù)發(fā)生的時(shí)間session-id-time。還有一個(gè)x-main,不知道是什么。

大多數(shù)的網(wǎng)站在您的電腦上只保存一條信息,即用戶(hù)ID。但一個(gè)站點(diǎn)可以用Cookie存儲(chǔ)的“名/值”對(duì)的最大數(shù)目沒(méi)有任何限制。

一個(gè)“名/值”對(duì)僅僅是一條命名的數(shù)據(jù),它不是程序,也不能“做”任何事情。一個(gè)網(wǎng)站只能取得它放在您的電腦中的信息,它無(wú)法從其它的Cookie文件中取得信息,也無(wú)法得到您的電腦上的其它任何東西

英文直接翻譯過(guò)來(lái)的意思呢就是小甜品 Cookie英文意指餅干,不過(guò)在電腦術(shù)語(yǔ)中它可不像餅干那么簡(jiǎn)單。簡(jiǎn)單的說(shuō),Cookie就是服務(wù)器暫存放在你計(jì)算機(jī)上的一筆資料,好讓服務(wù)器用來(lái)辨認(rèn)你的計(jì)算機(jī)。當(dāng)你在瀏覽網(wǎng)站的時(shí)候,Web服務(wù)器會(huì)先送一小小資料放在你的計(jì)算機(jī)上,Cookie 會(huì)幫你在網(wǎng)站上所打的文字或是一些選擇,都記錄下來(lái)。當(dāng)下次你再光臨同一個(gè)網(wǎng)站,Web服務(wù)器會(huì)先看看有沒(méi)有它上次留下的Cookie資料,有的話(huà),就會(huì)依據(jù)Cookie里的內(nèi)容來(lái)判斷使用者,送出特定的網(wǎng)頁(yè)內(nèi)容給你。

Cookie的使用很普遍,許多提供個(gè)人化服務(wù)的網(wǎng)站,都是利用Cookie來(lái)辨認(rèn)使用者,以方便送出使用者量身定做的內(nèi)容,像是Web接口的免費(fèi)E-mail網(wǎng)站,都要用到 Cookie。Cookie中記載的資料相有限,Cookie是安全的。網(wǎng)站不可能經(jīng)由Cookie獲得你的E-mail地址或是其它私人資料,更沒(méi)有辦法透過(guò)Cookie來(lái)存取你的計(jì)算機(jī)。但是如果你實(shí)在不喜歡Web服務(wù)器亂丟餅干(Cookie)到你家,當(dāng)然可以讓瀏覽器拒絕網(wǎng)站存放Cookie到你的計(jì)算機(jī)。只要在IE的“工具”菜單下選擇“Intertnet選項(xiàng)”的“安全”,按自定義級(jí)別,將Cookie部分設(shè)為關(guān)閉,按確定,關(guān)閉瀏覽器,再重新啟動(dòng)瀏覽器即可。當(dāng)你關(guān)閉Cookie之后,很多網(wǎng)站的個(gè)人化服務(wù)功能很可能也不能再使用了.

 

二 Session 簡(jiǎn)介

IE中:

有效的窗品包括

1.Session對(duì)象只在建立Session對(duì)象的窗口中有效。

2.在建立Session對(duì)象的窗口中新開(kāi)鏈接的窗口

無(wú)效的窗口包括

1.直接啟動(dòng)IE瀏覽器的窗口

2.不是在建立Session對(duì)象的窗口中新開(kāi)鏈接的窗口

NetScape中:

只要一個(gè)窗口有了某個(gè)Session對(duì)象,則全部窗口對(duì)此Session都有效

Session是什么呢?簡(jiǎn)單來(lái)說(shuō)就是服務(wù)器給客戶(hù)端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶(hù)瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。當(dāng)每個(gè)用戶(hù)首次與這臺(tái)WWW服務(wù)器建立連接時(shí),他就與這個(gè)服務(wù)器建立了一個(gè)Session,同時(shí)服務(wù)器會(huì)自動(dòng)為其分配一個(gè)SessionID,用以標(biāo)識(shí)這個(gè)用戶(hù)的唯一身份。這個(gè)SessionID是由WWW服務(wù)器隨機(jī)產(chǎn)生的一個(gè)由24個(gè)字符組成的字符串,我們會(huì)在下面的實(shí)驗(yàn)中見(jiàn)到它的實(shí)際樣子。

這個(gè)唯一的SessionID是有很大的實(shí)際意義的。當(dāng)一個(gè)用戶(hù)提交了表單時(shí),瀏覽器會(huì)將用戶(hù)的SessionID自動(dòng)附加在HTTP頭信息中,(這是瀏覽器的自動(dòng)功能,用戶(hù)不會(huì)察覺(jué)到),當(dāng)服務(wù)器處理完這個(gè)表單后,將結(jié)果返回給SessionID所對(duì)應(yīng)的用戶(hù)。試想,如果沒(méi)有SessionID,當(dāng)有兩個(gè)用戶(hù)同時(shí)進(jìn)行注冊(cè)時(shí),服務(wù)器怎樣才能知道到底是哪個(gè)用戶(hù)提交了哪個(gè)表單呢。當(dāng)然,SessionID還有很多其他的作用,我們會(huì)在后面提及到。

除了SessionID,在每個(gè)Session中還包含很多其他信息。但是對(duì)于編寫(xiě)ASP或ASP.NET的程序與來(lái)說(shuō),最有用的還是可以通過(guò)訪(fǎng)問(wèn)ASP/ASP.NET的內(nèi)置Session對(duì)象,為每個(gè)用戶(hù)存儲(chǔ)各自的信息。例如我們想了解一下訪(fǎng)問(wèn)我們網(wǎng)站的用戶(hù)瀏覽了幾個(gè)頁(yè)面,我們可能在用戶(hù)可能訪(fǎng)問(wèn)到每個(gè)的頁(yè)面中加入:

<%
If Session("PageViewed") = ""Then
Session("PageViewed") = 1
Else
Session("PageViewed") = Session("PageViewed") + 1
End If
%>

通過(guò)以下這句話(huà)可以讓用戶(hù)得知自己瀏覽了幾個(gè)頁(yè)面:

<%
Response.Write("You have viewed " & Session("PageViewed") & " pages")
%>

可能有些有些讀者會(huì)問(wèn):這個(gè)看似像是數(shù)組的Session(“..”)是哪里來(lái)的?需要我定義嗎?實(shí)際上,這個(gè)Session對(duì)象是具有ASP解釋能力的的WWW服務(wù)器的內(nèi)建對(duì)象。也就是說(shuō)ASP的系統(tǒng)中已經(jīng)給你定義好了這個(gè)對(duì)象,你只需要使用就行了。其中Session(“..”)中的..就好像變量名稱(chēng),Session(“..”)=$中的$就是變量的值了。你只需要寫(xiě)上句話(huà),在這個(gè)用戶(hù)的每個(gè)頁(yè)面中都可以訪(fǎng)問(wèn)..變量中的值了。

其實(shí)ASP一共內(nèi)建了7個(gè)對(duì)象,有Session、Application、Cookie、Response、Request、Server等。在其他的服務(wù)器端腳本語(yǔ)言如JSP、PHP等中也有其類(lèi)似的對(duì)象,只是叫法或者使用方法上不太一樣。

ASP Session的功能的缺陷

目前ASP的開(kāi)發(fā)人員都正在使用Session這一強(qiáng)大的功能,但是在他們使用的過(guò)程中卻發(fā)現(xiàn)了ASP Session有以下缺陷:

進(jìn)程依賴(lài)性:ASP Session狀態(tài)存于IIS的進(jìn)程中,也就是inetinfo.exe這個(gè)程序。所以當(dāng)inetinfo.exe進(jìn)程崩潰時(shí),這些信息也就丟失。另外,重起或者關(guān)閉IIS服務(wù)都會(huì)造成信息的丟失。

Session狀態(tài)使用范圍的局限性:剛一個(gè)用戶(hù)從一個(gè)網(wǎng)站訪(fǎng)問(wèn)到另外一個(gè)網(wǎng)站時(shí),這些Session信息并不會(huì)隨之遷移過(guò)去。例如:新浪網(wǎng)站的WWW服務(wù)器可能不止一個(gè),一個(gè)用戶(hù)登錄之后要去各個(gè)頻道瀏覽,但是每個(gè)頻道都在不同的服務(wù)器上,如果想在這些WWW服務(wù)器共享Session信息怎么辦呢?

Cookie的依賴(lài)性:實(shí)際上客戶(hù)端的Session信息是存儲(chǔ)與Cookie中的,如果客戶(hù)端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。

鑒于ASP Session的以上缺陷,微軟的設(shè)計(jì)者們?cè)谠O(shè)計(jì)開(kāi)發(fā) ASP.NET Session時(shí)進(jìn)行了相應(yīng)的改進(jìn),完全克服了以上缺陷,使得ASP.NET Session成為了一個(gè)更加強(qiáng)大的功能。

 

三 區(qū)別

Session是存在服務(wù)器端的;而Cookie是存在客戶(hù)端的!!

Session更不需要Cookie來(lái)支持和不會(huì)受瀏覽器端的設(shè)置影響,可記錄每個(gè)訪(fǎng)問(wèn)者的信息,獨(dú)立在服務(wù)器端,比Cookie安全!

Session是存在內(nèi)存中的,瀏覽器關(guān)閉它也就“死”了;Cookie是以文件方式存在的,可以修改其“存活”時(shí)間。


將文章分享到:

版權(quán)所有:?jiǎn)⑦~科技-合肥網(wǎng)站建設(shè) 皖I(lǐng)CP備19009304號(hào)-1 皖公網(wǎng)安備 34010402702162號(hào)

網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì)公司啟邁科技,為眾多企業(yè)提供網(wǎng)站建設(shè),網(wǎng)站制作,響應(yīng)式網(wǎng)站設(shè)計(jì),手機(jī)網(wǎng)站建設(shè),微網(wǎng)站,模板建站,企業(yè)郵箱等一站式互聯(lián)網(wǎng)解決方案和建站服務(wù)10年。