天天看點

Cookie與Session你了解多少?

一、cookie

cookie的産生:

在程式中,會話跟蹤是很重要的事情。理論上,⼀個⽤戶的所有請求操作都應該屬于 同⼀個會話,⽽另⼀個⽤戶的所有請求操作則應該屬于另⼀個會話,⼆者不能混淆。 例如,⽤戶A在超市購買的任何商品都應該放在A的購物車内,不論是⽤戶A什麼時間 購買的,這都是屬于同⼀個會話的,不能放⼊⽤戶B或⽤戶C的購物車内,這不屬于同 ⼀個會話。⽽Web應⽤程式是使⽤HTTP協定傳輸資料的。HTTP協定是⽆狀态的協 議。⼀旦資料交換完畢,用戶端與伺服器端的連接配接就會關閉,再次交換資料需要建立新的連接配接。這就意味着伺服器⽆法從連接配接上跟蹤會話。即⽤戶A購買了⼀件商品放⼊購 物車内,當再次購買商品時伺服器已經⽆法判斷該購買⾏為是屬于⽤戶A的會話還是⽤ 戶B的會話了。要跟蹤該會話,必須引⼊⼀種機制。Cookie就是這樣的⼀種機制。它可 以彌補HTTP協定⽆狀态的不⾜。在Session出現之前,基本上所有的⽹站都采⽤ Cookie來跟蹤會話。

cookie:Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社群發展的⼀種機制。⽬前 Cookie已經成為标準,所有的主流浏覽器如IE、Netscape、Firefox、Opera等都⽀持 Cookie。 Cookie實際上是⼀⼩段的⽂本資訊。用戶端請求伺服器,如果伺服器需要記錄該⽤戶狀态,就使⽤response向用戶端浏覽器頒發⼀個Cookie。用戶端浏覽器會把Cookie保 存起來。 當浏覽器再請求該⽹站時,浏覽器把請求的⽹址連同該Cookie⼀同送出給服務 器。伺服器檢查該Cookie,以此來辨認⽤戶狀态。伺服器還可以根據需要修改Cookie的 内容。

特性:

  1. Cookie具有不可跨域名性:根據Cookie規範,浏覽器通路Google隻會攜帶Google的Cookie,⽽不會攜帶 Baidu的Cookie。Google也隻能操作Google的Cookie,⽽不能操作Baidu的Cookie。Cookie在用戶端是由浏 覽器來管理的。浏覽器能夠保證Google隻會操作Google的Cookie⽽不會操作Baidu的Cookie,從⽽保證⽤戶的隐私安全。浏覽器判斷⼀個⽹站是否能操作另⼀個⽹站Cookie的依據是域名。Google與Baidu的域名不⼀ 樣,是以Google不能操作Baidu的Cookie。需要注意的是,雖然⽹站images.google.com與⽹站 www.google.com同屬于Google,但是域名不⼀樣,⼆者同樣不能互相操作彼此的Cookie。
  2. Cookie的有效期:Cookie的maxAge決定着Cookie的有效期,機關為秒(Second)。如果maxAge屬性為正 數,則表⽰該Cookie會在maxAge秒之後⾃動失效。 浏覽器會将maxAge為正數的Cookie持久化,即寫到對應 的Cookie⽂件中。⽆論客戶關閉了浏覽器還是電腦,隻要還在maxAge秒之前,登入⽹站時該Cookie仍然有效,如果maxAge設定為負值的話,則為浏覽器程序Cookie(記憶體中儲存),關閉浏覽器就失效;如果設定為0,則立即删除該Cookie。
  3. Cookie并不提供修改、删除操作

二、Session

session:會話(Session)跟蹤是Web程式中常⽤的技術,用來跟蹤使用者的整個會話。常⽤的會話跟蹤技術是Cookie與Session。Cookie通過在用戶端記錄資訊确定使用者身份, Session通過在伺服器端記錄資訊确定使用者身份。

除了使⽤Cookie,Web應⽤程式中還經常使⽤Session來記錄用戶端狀态。Session是伺服器端使⽤的⼀種記錄用戶端狀态的機制,使⽤上⽐Cookie簡單⼀些,相應的也增加 了伺服器的存儲壓⼒。

Session是另⼀種記錄客戶狀态的機制,不同的是Cookie儲存在用戶端浏覽器中,⽽ Session儲存在伺服器上。用戶端浏覽器通路伺服器的時候,伺服器把用戶端資訊以某 種形式記錄在伺服器上。這就是Session。用戶端浏覽器再次通路時隻需要從該Session 中查找該客戶的狀态就可以了。如果說Cookie機制是通過檢查客戶⾝上的“通⾏證”來 确定客戶⾝份的話,那麼Session機制就是通過檢查伺服器上的“客戶明細表”來确認客 戶⾝份。Session相當于程式在伺服器上建⽴的⼀份客戶檔案,客戶來訪的時候隻需要 查詢客戶檔案表就可以了。

Session特性:

  • Session的生命周期:Session儲存在伺服器端。為了獲得更⾼的存取速度,伺服器⼀般 把Session放在記憶體⾥。 每個⽤戶都會有⼀個獨⽴的Session。Session在⽤戶第⼀次通路 伺服器的時候⾃動建立。需要注意隻有通路JSP、Servlet等程式時才會建立Session,隻 通路HTML、IMAGE等靜态資源并不會建立Session。Session⽣成後,隻要⽤戶繼續 通路,伺服器就會更新Session的最後通路時間,并維護該Session。⽤戶每通路伺服器 ⼀次,⽆論是否讀寫Session,伺服器都認為該⽤戶的Session“活躍(active)”了⼀ 次。
  • Session的有效期:由于會有越來越多的⽤戶通路伺服器,是以Session也會越來越多。 為防⽌記憶體溢出,伺服器會把長時間内沒有活躍的Session從記憶體删除。這個時間就是 Session的逾時時間。如果超過了逾時時間沒通路過伺服器,Session就⾃動失效了

三、cookie和session的差別:

  • cookie資料存放在客戶的浏覽器上,session資料放在伺服器上.
  • cookie不是很安全,别⼈可以分析存放在本地的COOKIE并進⾏COOKIE欺騙。考慮到安全應當使用session。
  • session會在⼀定時間内儲存在伺服器上。當通路增多,會⽐較占⽤你伺服器的性能考慮到減輕伺服器性能⽅⾯,應當使⽤cookie。
  • 單個cookie儲存的資料不能超過4K,很多浏覽器都限制⼀個站點最多儲存20個cookie。 (Session對象沒有對存儲的資料量的限制,其中可以儲存更為複雜的資料類型)
注:記住密碼功能就是使⽤永久cookie寫在用戶端電腦硬碟上,下次登入時,⾃動将 cookie資訊附加發送給服務端。

繼續閱讀