cookie 與session的區別與理解

一、cookie機制和session機制的區別


具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。

通俗的來說就是cookie在瀏覽器上(客服端)而session在服務端

Cookie是客戶端的存儲空間,由瀏覽器來維持
同時我們也看到,由於採用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session
機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇。

 

當用戶連接服務器的時候瀏覽器會帶着一個cookie來到服務器 ,服務器會生成一個唯一的session 每一個用戶的ID都不一樣

而Session這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 Session提交到服務器端,

來存取Session數據。這一過程,是不用程序猿的 ,這也是服務端的一個本身的機制。所以一旦客戶端禁用Cookie,那麼Session也會失效。

二、COOKIE能幹嘛?

在一些投票之類的場合,我們往往因爲公平的原則要求每人只能投一票,在一些WEB開發中也有類似的情況,這時候我們通常會使用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爲例)


  1. <!-- ==================== Default Session Configuration ================= -->  
  2.   <!-- You can set the default session timeout (in minutes) for all newly   -->  
  3.   <!-- created sessions by modifying the value below.    -->  
  4.     <session-config>  
  5.         <session-timeout>30</session-timeout>  
  6. </session-config>  

Tomcat默認session超時時間爲30分鐘,可以根據需要修改,負數或0爲不限制session失效時間。


2.      在工程的web.xml中設置

[html] view plain copy
  1. <!-- 時間單位爲分鐘   -->  

<session-config>

      <session-timeout>15</session-timeout>

</session-config>


3.      通過Java代碼設置

session.setMaxInactiveInterval(30*60);//以秒爲單位


三種方式優先級:1 < 2 <3

三、區別 ——轉載

總的來說:cookie機制採用的是在客戶端保持狀態的方案,session是一種服務器端保持的機制


存取方式的不同
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會話跟蹤還會失效。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章