詳細(xì)分析Session和Cookie的區(qū)別
一 cookie簡介
因特網(wǎng)的Cookie技術(shù)極其簡單,卻有著旺盛的生命力。Cookie開始引起眾人的注意是從2000年二月份隨著網(wǎng)絡(luò)隱私權(quán)的提出開始的,有關(guān)的辯論至今仍在繼續(xù)。從另一方面來說,Cookie使得瀏覽網(wǎng)頁更容易了。幾乎所有的主要的網(wǎng)站設(shè)計(jì)者都使用了Cookie,因?yàn)樗麄兿霝闉g覽網(wǎng)站的人提供一個(gè)更好的瀏覽環(huán)境,同時(shí)也能更加準(zhǔn)確地收集訪客的信息。
家頗有影響的報(bào)紙上曾刊登了一篇很有深度的關(guān)于網(wǎng)絡(luò)隱私的文章,上面對于Cookie的定義是這樣的:
“Cookie是Web網(wǎng)站放在您的硬盤上的程序。它守在您的電腦里,搜集您的信息以及您在因特網(wǎng)上所做的任何事情,當(dāng)Web站點(diǎn)需要的時(shí)候它能夠下載所有這些搜集到的信息?!?/P>
像這樣的定義在報(bào)刊中相當(dāng)普遍。問題是,它的定義犯了很大的錯(cuò)誤。Cookie不是程序,而且它不能像程序一樣地運(yùn)行,所以它無法為自己搜集任何信息。它也不能從您的電腦上取得您的任何個(gè)人資料。
Cookie的比較確切的定義應(yīng)該是這個(gè)樣子:
“Cookie是Web服務(wù)器保存在用戶硬盤上的一段文本。Cookie允許一個(gè)Web站點(diǎn)在用戶的電腦上保存信息并且隨后再取回它。信息的片斷以‘名/值’對(name-valuepairs)的形式儲(chǔ)存。”
舉例來說,一個(gè)Web站點(diǎn)可能會(huì)為每一個(gè)訪問者產(chǎn)生一個(gè)唯一的ID,然后以Cookie文件的形式保存在每個(gè)用戶的機(jī)器上。
如果您使用IE瀏覽器訪問Web,您會(huì)看到所有保存在您的硬盤上的Cookie。它們最常存放的地方是:c:windowscookies(在Win2000中則是C:DocumentsandSettings您的用戶名Cookies——作者注)。在我的機(jī)器上共有165個(gè)文件。每一個(gè)文件都是一個(gè)由“名/值”對組成的文本文件,另外還有一個(gè)文件保存有所有對應(yīng)的Web站點(diǎn)的信息。
在這個(gè)文件夾里的每個(gè)Cookie文件都是一個(gè)簡單而又普通的文本文件。透過文件名,您可以看到是哪個(gè)Web站點(diǎn)在您的機(jī)器上放置了Cookie(當(dāng)然站點(diǎn)信息在文件里也有保存)。您也能雙擊打開每一個(gè)Cookie文件。
比如,我訪問了goto.com,而且這個(gè)站點(diǎn)在我的電腦上放了個(gè)Cookie。goto.com的Cookie文件包含了這樣的內(nèi)容:
UserIDA9A3BECE0563982Dwww.goto.com/
goto.com在我的電腦上存入了一個(gè)單一的“名/值”對。“名/值”對的“名”是UserID,“值”是A9A3BECE0563982D。在我第一次訪問goto.com的時(shí)候,該網(wǎng)站為我分配了一個(gè)唯一的ID并存在我的電腦里。
(注:除了上面舉例的“名/值”對,可能會(huì)有其它的“名/值”對同時(shí)保存下來。那是瀏覽器的一些內(nèi)部信息,一般用戶不必多做了解。)
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è)主用戶IDubid-main,一個(gè)標(biāo)記每次任務(wù)的IDsession-id及任務(wù)發(fā)生的時(shí)間session-id-time。還有一個(gè)x-main,不知道是什么。
大多數(shù)的網(wǎng)站在您的電腦上只保存一條信息,即用戶ID。但一個(gè)站點(diǎn)可以用Cookie存儲(chǔ)的“名/值”對的最大數(shù)目沒有任何限制。
一個(gè)“名/值”對僅僅是一條命名的數(shù)據(jù),它不是程序,也不能“做”任何事情。一個(gè)網(wǎng)站只能取得它放在您的電腦中的信息,它無法從其它的Cookie文件中取得信息,也無法得到您的電腦上的其它任何東西
英文直接翻譯過來的意思呢就是小甜品 Cookie英文意指餅干,不過在電腦術(shù)語中它可不像餅干那么簡單。簡單的說,Cookie就是服務(wù)器暫存放在你計(jì)算機(jī)上的一筆資料,好讓服務(wù)器用來辨認(rèn)你的計(jì)算機(jī)。當(dāng)你在瀏覽網(wǎng)站的時(shí)候,Web服務(wù)器會(huì)先送一小小資料放在你的計(jì)算機(jī)上,Cookie 會(huì)幫你在網(wǎng)站上所打的文字或是一些選擇,都記錄下來。當(dāng)下次你再光臨同一個(gè)網(wǎng)站,Web服務(wù)器會(huì)先看看有沒有它上次留下的Cookie資料,有的話,就會(huì)依據(jù)Cookie里的內(nèi)容來判斷使用者,送出特定的網(wǎng)頁內(nèi)容給你。
Cookie的使用很普遍,許多提供個(gè)人化服務(wù)的網(wǎng)站,都是利用Cookie來辨認(rèn)使用者,以方便送出使用者量身定做的內(nèi)容,像是Web接口的免費(fèi)E-mail網(wǎng)站,都要用到 Cookie。Cookie中記載的資料相有限,Cookie是安全的。網(wǎng)站不可能經(jīng)由Cookie獲得你的E-mail地址或是其它私人資料,更沒有辦法透過Cookie來存取你的計(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 簡介
IE中:
有效的窗品包括
1.Session對象只在建立Session對象的窗口中有效。
2.在建立Session對象的窗口中新開鏈接的窗口
無效的窗口包括
1.直接啟動(dòng)IE瀏覽器的窗口
2.不是在建立Session對象的窗口中新開鏈接的窗口
NetScape中:
只要一個(gè)窗口有了某個(gè)Session對象,則全部窗口對此Session都有效
Session是什么呢?簡單來說就是服務(wù)器給客戶端的一個(gè)編號(hào)。當(dāng)一臺(tái)WWW服務(wù)器運(yùn)行時(shí),可能有若干個(gè)用戶瀏覽正在運(yùn)正在這臺(tái)服務(wù)器上的網(wǎng)站。當(dāng)每個(gè)用戶首次與這臺(tái)WWW服務(wù)器建立連接時(shí),他就與這個(gè)服務(wù)器建立了一個(gè)Session,同時(shí)服務(wù)器會(huì)自動(dòng)為其分配一個(gè)SessionID,用以標(biāo)識(shí)這個(gè)用戶的唯一身份。這個(gè)SessionID是由WWW服務(wù)器隨機(jī)產(chǎn)生的一個(gè)由24個(gè)字符組成的字符串,我們會(huì)在下面的實(shí)驗(yàn)中見到它的實(shí)際樣子。
這個(gè)唯一的SessionID是有很大的實(shí)際意義的。當(dāng)一個(gè)用戶提交了表單時(shí),瀏覽器會(huì)將用戶的SessionID自動(dòng)附加在HTTP頭信息中,(這是瀏覽器的自動(dòng)功能,用戶不會(huì)察覺到),當(dāng)服務(wù)器處理完這個(gè)表單后,將結(jié)果返回給SessionID所對應(yīng)的用戶。試想,如果沒有SessionID,當(dāng)有兩個(gè)用戶同時(shí)進(jìn)行注冊時(shí),服務(wù)器怎樣才能知道到底是哪個(gè)用戶提交了哪個(gè)表單呢。當(dāng)然,SessionID還有很多其他的作用,我們會(huì)在后面提及到。
除了SessionID,在每個(gè)Session中還包含很多其他信息。但是對于編寫ASP或ASP.NET的程序與來說,最有用的還是可以通過訪問ASP/ASP.NET的內(nèi)置Session對象,為每個(gè)用戶存儲(chǔ)各自的信息。例如我們想了解一下訪問我們網(wǎng)站的用戶瀏覽了幾個(gè)頁面,我們可能在用戶可能訪問到每個(gè)的頁面中加入:
<%
If Session("PageViewed") = ""Then
Session("PageViewed") = 1
Else
Session("PageViewed") = Session("PageViewed") + 1
End If
%>
通過以下這句話可以讓用戶得知自己瀏覽了幾個(gè)頁面:
<%
Response.Write("You have viewed " & Session("PageViewed") & " pages")
%>
可能有些有些讀者會(huì)問:這個(gè)看似像是數(shù)組的Session(“..”)是哪里來的?需要我定義嗎?實(shí)際上,這個(gè)Session對象是具有ASP解釋能力的的WWW服務(wù)器的內(nèi)建對象。也就是說ASP的系統(tǒng)中已經(jīng)給你定義好了這個(gè)對象,你只需要使用就行了。其中Session(“..”)中的..就好像變量名稱,Session(“..”)=$中的$就是變量的值了。你只需要寫上句話,在這個(gè)用戶的每個(gè)頁面中都可以訪問..變量中的值了。
其實(shí)ASP一共內(nèi)建了7個(gè)對象,有Session、Application、Cookie、Response、Request、Server等。在其他的服務(wù)器端腳本語言如JSP、PHP等中也有其類似的對象,只是叫法或者使用方法上不太一樣。
ASP Session的功能的缺陷
目前ASP的開發(fā)人員都正在使用Session這一強(qiáng)大的功能,但是在他們使用的過程中卻發(fā)現(xiàn)了ASP Session有以下缺陷:
進(jìn)程依賴性: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è)用戶從一個(gè)網(wǎng)站訪問到另外一個(gè)網(wǎng)站時(shí),這些Session信息并不會(huì)隨之遷移過去。例如:新浪網(wǎng)站的WWW服務(wù)器可能不止一個(gè),一個(gè)用戶登錄之后要去各個(gè)頻道瀏覽,但是每個(gè)頻道都在不同的服務(wù)器上,如果想在這些WWW服務(wù)器共享Session信息怎么辦呢?
Cookie的依賴性:實(shí)際上客戶端的Session信息是存儲(chǔ)與Cookie中的,如果客戶端完全禁用掉了Cookie功能,他也就不能享受到了Session提供的功能了。
鑒于ASP Session的以上缺陷,微軟的設(shè)計(jì)者們在設(shè)計(jì)開發(fā) ASP.NET Session時(shí)進(jìn)行了相應(yīng)的改進(jìn),完全克服了以上缺陷,使得ASP.NET Session成為了一個(gè)更加強(qiáng)大的功能。
三 區(qū)別
Session是存在服務(wù)器端的;而Cookie是存在客戶端的!!
Session更不需要Cookie來支持和不會(huì)受瀏覽器端的設(shè)置影響,可記錄每個(gè)訪問者的信息,獨(dú)立在服務(wù)器端,比Cookie安全!
Session是存在內(nèi)存中的,瀏覽器關(guān)閉它也就“死”了;Cookie是以文件方式存在的,可以修改其“存活”時(shí)間。
[ 上一篇 ] PS導(dǎo)出圖片時(shí)提示內(nèi)存不足RAM的解決辦法
[ 下一篇 ] 搭配好線條和形狀增強(qiáng)頁面的藝術(shù)魅力
版權(quá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年。