cookie與session差別
<h1 class="pgc-h-arrow-right" data-track="3">Cookie:</h1>
Cookies是伺服器在本地機器上存儲的小段文本并随每一個請求發送至同一個伺服器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie規範。網絡伺服器用HTTP頭向用戶端發送cookies,在客戶終端,浏覽器解析這些cookies并将它們儲存為一個本地檔案,它會自動将同一伺服器的任何請求縛上這些cookies 。
cookie的内容主要包括:名字,值,過期時間,路徑和域。
具體來說cookie機制采用的是在用戶端保持狀态的方案。它是在使用者端的會話狀态的存貯機制,它需要使用者打開用戶端的cookie支援。cookie的作用就是為了解決HTTP協定無狀态的缺陷所作的努力。
<h1 class="pgc-h-arrow-right" data-track="10">Session:</h1>
session機制采用的是一種在伺服器端保持狀态的解決方案。同時我們也看到,由于采用伺服器端保持狀态的方案在用戶端也需要儲存一個辨別,是以session機制可能需要借助于cookie機制來達到儲存辨別的目的。而session提供了友善管理全局變量的方式 。
session是針對每一個使用者的,變量的值儲存在伺服器上,用一個sessionID來區分是哪個使用者session變量,這個值是通過使用者的浏覽器在通路的時候傳回給伺服器,當客戶禁用cookie時,這個值也可能設定為由get來傳回給伺服器。
<h1 class="pgc-h-arrow-right" data-track="13">Cookie與session的差別:Cookie與Session都能夠進行會話跟蹤,但是完成的原理不太一樣。</h1>
1 .存取方式的不同
Cookie中隻能保管ASCII字元串,假如需求存取Unicode字元或者二進制資料,需求先進行編碼。Cookie中也不能直接存取Java對象。若要存儲略微複雜的資訊,運用Cookie是比拟艱難的。
而Session中能夠存取任何類型的資料,包括而不限于String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,對象等,運用起來十分便當。能夠把Session看做是一個Java容器類。
2 .隐私政策的不同
Cookie存儲在用戶端閱讀器中,對用戶端是可見的,用戶端的一些程式可能會窺探、複制以至修正Cookie中的内容。而Session存儲在伺服器上,對用戶端是透明的,不存在敏感資訊洩露的風險。
假如選用Cookie,比較好的方法是,敏感的資訊如賬号密碼等盡量不要寫到Cookie中。最好是像Google、Baidu那樣将Cookie資訊加密,送出到伺服器後再進行解密,保證Cookie中的資訊隻要本人能讀得懂。而假如選擇Session就省事多了,反正是放在伺服器上,Session裡任何隐私都能夠有效的保護。
3.有效期上的不同
使用過Google的人都曉得,假如登入過Google,則Google的登入資訊長期有效。使用者不用每次通路都重新登入,Google會持久地記載該使用者的登入資訊。要到達這種效果,運用Cookie會是比較好的選擇。隻需要設定Cookie的過期時間屬性為一個很大很大的數字。
由于Session依賴于名為JSESSIONID的Cookie,而Cookie JSESSIONID的過期時間默許為–1,隻需關閉了閱讀器該Session就會失效,因而Session不能完成資訊永世有效的效果。運用URL位址重寫也不能完成。而且假如設定Session的逾時時間過長,伺服器累計的Session就會越多,越容易招緻記憶體溢出。
4.伺服器壓力的不同
Session是保管在伺服器端的,每個使用者都會産生一個Session。假如并發通路的使用者十分多,會産生十分多的Session,耗費大量的記憶體。因而像Google、Baidu、Sina這樣并發通路量極高的網站,是不太可能運用Session來追蹤客戶會話的。
而Cookie保管在用戶端,不占用伺服器資源。假如并發閱讀的使用者十分多,Cookie是很好的選擇。關于Google、Baidu、Sina來說,Cookie或許是唯一的選擇。
5 .浏覽器支援的不同
Cookie是需要用戶端浏覽器支援的。假如用戶端禁用了Cookie,或者不支援Cookie,則會話跟蹤會失效。關于WAP上的應用,正常的Cookie就派不上用場了。
假如用戶端浏覽器不支援Cookie,需要運用Session以及URL位址重寫。需要注意的是一切地用到Session程式的URL都要進行URL位址重寫,否則Session會話跟蹤還會失效。關于WAP應用來說,Session+URL位址重寫或許是它唯一的選擇。
假如用戶端支援Cookie,則Cookie既能夠設為本浏覽器視窗以及子視窗内有效(把過期時間設為–1),也能夠設為一切閱讀器視窗内有效(把過期時間設為某個大于0的整數)。但Session隻能在本閱讀器視窗以及其子視窗内有效。假如兩個浏覽器視窗互不相幹,它們将運用兩個不同的Session。(IE8下不同視窗Session相幹)
6.跨域支援上的不同
Cookie支援跨域名通路,例如将domain屬性設定為“.biaodianfu.com”,則以“.biaodianfu.com”為字尾的一切域名均能夠通路該Cookie。跨域名Cookie如今被普遍用在網絡中,例如Google、Baidu、Sina等。而Session則不會支援跨域名通路。Session僅在他所在的域名内有效。
僅運用Cookie或者僅運用Session可能完成不了理想的效果。這時應該嘗試一下同時運用Cookie與Session。Cookie與Session的搭配運用在實踐項目中會完成很多意想不到的效果。