所截取原文在:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html
http://www.cnblogs.com/xulb597/archive/2012/07/02/2573252.html
cookie 和session 的區(qū)別:
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2、cookie不是很安全,瀏覽器可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。
3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。
4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。
5、session保存在服務(wù)器,客戶端不知道其中的信息;cookie保存在客戶端,服務(wù)器能夠知道其中的信息。
6、session中保存的是對(duì)象,cookie中保存的是字符串。
7、session不能區(qū)分路徑,同一個(gè)用戶在訪問一個(gè)網(wǎng)站期間,所有的session在任何一個(gè)地方都可以訪問到。而cookie中如果設(shè)置了路徑參數(shù),那么同一個(gè)網(wǎng)站中不同路徑下的cookie互相是訪問不到的。
http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時(shí),服務(wù)器都打開新的會(huì)話,而且服務(wù)器也不會(huì)自動(dòng)維護(hù)客戶的上下文信息,那么要怎么才能實(shí)現(xiàn)網(wǎng)上商店中的購物車呢,session就是一種保存上下文信息的機(jī)制,它是針對(duì)每一個(gè)用戶的,變量的值保存在服務(wù)器端,通過SessionID來區(qū)分不同的客戶,session是以cookie或URL重寫為基礎(chǔ)的,默認(rèn)使用cookie來實(shí)現(xiàn),系統(tǒng)會(huì)創(chuàng)造一個(gè)名為JSESSIONID的輸出cookie,我們叫做session cookie,以區(qū)別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲(chǔ)于瀏覽器內(nèi)存中的,并不是寫到硬盤上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當(dāng)我們把瀏覽器的cookie禁止后,web服務(wù)器會(huì)采用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到 sessionid=KWJHUG6JJM65HS2K6之類的字符串。
明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區(qū)別了,網(wǎng)上那些關(guān)于兩者安全性的討論也就一目了然了,session cookie針對(duì)某一次會(huì)話而言,會(huì)話結(jié)束session cookie也就隨著消失了,而persistent cookie只是存在于客戶端硬盤上的一段文本(通常是加密的),而且可能會(huì)遭到cookie欺騙以及針對(duì)cookie的跨站腳本攻擊,自然不如 session cookie安全了。
通常session cookie是不能跨窗口使用的,當(dāng)你新開了一個(gè)瀏覽器窗口進(jìn)入相同頁面時(shí),系統(tǒng)會(huì)賦予你一個(gè)新的sessionid,這樣我們信息共享的目的就達(dá)不到了,此時(shí)我們可以先把sessionid保存在persistent cookie中,然后在新窗口中讀出來,就可以得到上一個(gè)窗口SessionID了,這樣通過session cookie和persistent cookie的結(jié)合我們就實(shí)現(xiàn)了跨窗口的session tracking(會(huì)話跟蹤)。