一、cookie機制和session機制的區別
具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。
通俗的來說就是cookie在瀏覽器上(客服端)而session在服務端
Cookie是客戶端的存儲空間,由瀏覽器來維持
同時我們也看到,由於採用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session
機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇。
當用戶連接服務器的時候瀏覽器會帶着一個cookie來到服務器 ,服務器會生成一個唯一的session 每一個用戶的ID都不一樣
而Session這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 Session提交到服務器端,
來存取Session數據。這一過程,是不用程序猿的 ,這也是服務端的一個本身的機制。所以一旦客戶端禁用Cookie,那麼Session也會失效。
二、COOKIE能幹嘛?
三、設置cookie過期的時間
例如: Response.Cookies("name2").expires=date+1,表示Cookies保存1天,再比如: Response.Cookies("name2").expires=Hour+8,表示Cookies保存8小時。
設置Cookie時間
//過期時間
ck.setMaxAge(Integer.MAX_VALUE);
// //-1,瀏覽器
// ck.setMaxAge(-1);
// //0,一到瀏覽器端就失效
// ck.setMaxAge(0);
session 過期時間一般是三十分鐘。也可以自己設置
1. 在web容器中設置(此處以tomcat爲例)
- <!-- ==================== Default Session Configuration ================= -->
- <!-- You can set the default session timeout (in minutes) for all newly -->
- <!-- created sessions by modifying the value below. -->
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
Tomcat默認session超時時間爲30分鐘,可以根據需要修改,負數或0爲不限制session失效時間。
2. 在工程的web.xml中設置
- <!-- 時間單位爲分鐘 -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
3. 通過Java代碼設置
session.setMaxInactiveInterval(30*60);//以秒爲單位
三種方式優先級:1 < 2 <3
三、區別 ——轉載
存取方式的不同
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二進制數據,需求先進行編碼。Cookie中也不能直接存取Java對象。若要存儲略微複雜的信息,運用Cookie是比擬艱難的。
而Session中能夠存取任何類型的數據,包括而不限於String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,對象等,運用起來十分便當。能夠把Session看做是一個Java容器類。
隱私策略的不同
Cookie存儲在客戶端閱讀器中,對客戶端是可見的,客戶端一些程序可能會窺探、複製以至修正Cookie中的內容。而Session存儲在服務器上,對客戶端是透明的,不存在敏感信息泄露的風險。
假如選用Cookie,比較好的方法是,敏感的信息如賬號密碼等儘量不要寫到Cookie中。最好是像Google、Baidu那樣將Cookie信息加密,提交到服務器後再進行解密,保證Cookie中的信息只要本 人能讀得懂。
而假如選擇Session就省事多了,反正是放在服務器上,Session裏任何隱私都能夠有效的保護。
有效期上的不同
使用過Google的人都曉得,假如登錄過Google,則Google的登錄信息長期有效。用戶不用每次訪問都重新登錄,Google會持久地記載該用戶的登錄信息。要到達這種效果,運用Cookie會是比較好的選擇。只需要設置Cookie的過期時間屬性爲一個很大很大的數字。
由於Session依賴於名爲JSESSIONID的Cookie,而Cookie JSESSIONID的過期時間默許爲–1,只需關閉了閱讀器該Session就會失效,因而Session不能完成信息永世有效的效果。運用URL地址重寫也不能完成。而且假如設置Session的超時時間過長,服務器累計的Session就會越多,越容易招致內存溢出。
服務器壓力的不同
Session是保管在服務器端的,每個用戶都會產生一個Session。假如併發訪問的用戶十分多,會產生十分多的Session,耗費大量的內存。因而像Google、Baidu、Sina這樣併發訪問量極高的網站,是不太可能運用Session來追蹤客戶會話的。
而Cookie保管在客戶端,不佔用服務器資源。假如併發閱讀的用戶十分多,Cookie是很好的選擇。關於Google、Baidu、Sina來說,Cookie或許是唯一的選擇。
瀏覽器支持的不同
Cookie是需要客戶端瀏覽器支持的。假如客戶端禁用了Cookie,或者不支持Cookie,則會話跟蹤會失效。關於WAP上的應用,常規的Cookie就派不上用場了。
假如客戶端瀏覽器不支持Cookie,需要運用Session以及URL地址重寫。需要注意的是一切的用到Session程序的URL都要進行URL地址重寫,否則Session會話跟蹤還會失效。