一、存取方式不同
cookie中只能存儲ASCII字符串。如果需要訪問Unicode字符或二進制數(shù)據(jù),則需要先對它們進行編碼。不能直接訪問cookie中的Java對象。如果想存儲稍微復(fù)雜的信息,則使用cookie會更加困難。
Session可以訪問任何類型的數(shù)據(jù),包括但不限于字符串、整數(shù)、列表、Map等。JavaBeans甚至任何Java類、對象等也可以直接存儲在session中,使用起來非常方便。
二、不同的隱私政策
Cookie存儲在客戶端的閱讀器中,并且對客戶端可見??蛻舳说哪承┏绦蚩赡軙Q探、復(fù)制甚至修改cookie中的內(nèi)容。會話存儲在服務(wù)器上,對客戶端透明,不存在敏感信息泄露的風(fēng)險。
三、有效期不同
用過谷歌的人都知道,如果你曾經(jīng)登錄過谷歌,谷歌的登錄信息是長期有效的。用戶無需每次訪問都重新登錄,谷歌會持久記錄用戶的登錄信息。為了達(dá)到這個效果,使用cookies將是一個更好的選擇。您只需要將cookie過期時間屬性設(shè)置為一個非常大的數(shù)字。
由于Session依賴于名為JSESSIONID的cookie,并且CookieJSESSIONID的過期時間默認(rèn)為-1,因此只要讀者關(guān)閉,Session就會失效,因此Session無法完成永久有效信息的結(jié)果。
四、服務(wù)器壓力不同
Session保存在服務(wù)器端,每個用戶生成一個Session。如果有大量并發(fā)用戶,會產(chǎn)生大量會話,消耗大量內(nèi)存。因此,谷歌、百度、新浪等并發(fā)訪問量極高的網(wǎng)站不太可能使用Session來跟蹤客戶會話。
Cookie保存在客戶端,不占用服務(wù)器資源。如果有很多用戶同時閱讀,Cookie是一個不錯的選擇。
五、瀏覽器支持不同
客戶端瀏覽器支持Cookie。如果客戶端禁用cookie,或不支持cookie,會話跟蹤將無效。對于Wap上的應(yīng)用程序,常規(guī)cookie沒有用。
如果客戶端瀏覽器不支持cookie,則需要使用Session和URL地址重寫。需要注意的是,所有使用Session程序的URL都必須重寫URL地址,否則Session會話跟蹤將失效。
六、跨域支持不同
Cookie支持跨域訪問,而Session不支持跨域訪問。session只在他所在的域名內(nèi)有效。