cookie技術和session技術
引言
HTTP是一種無狀態的協議,採用的是“連線-請求-應答-關閉連線”模式,當客戶端發出請求的時,伺服器才會建立連線,一旦客戶端請求結束,伺服器便會中斷連線,不會一直與客戶端保持連線,當下一次發起請求時,伺服器會把這個 請求看成是一個新的連線,與之前的請求無關,但是在互動式的web應用中,保持狀態是非常重要的,一個有狀態的協議可以用來幫助在多個請求與響應之間實現複雜的業務邏輯。會話跟蹤技術就是一種在客戶端與伺服器間保持HTTP狀態的解決方案。主要有cookie技術,session技術,url重寫技術,隱藏表單域技術。
Cookie技術
Cookie技術是一種在客戶端保持會話跟蹤的解決方案。Cookie是指某些網站為了辨別使用者身份二儲存在使用者端上的文字資訊(當然通常是經過加密的),cookie在使用者第一次訪問伺服器時,由伺服器通過響應頭的方式傳送給客戶端瀏覽器,當用戶再次向伺服器傳送請求時恢復帶上這些文字資訊。通過cookie,伺服器在接收到來自客戶端瀏覽器的請求資訊時,能夠在通過分析請求頭的內容從而得到使用者端特有的資訊,從而動態生成與該客戶端相對應的內容,比如有些網站根據使用者的喜好,進行個性化推送,這些都可以通過客戶端的cookie實現。
Cookie的缺點主要集中在安全性和隱私性上:
1、Cookie可能被禁用,當用戶非常注意個人隱私保護時,很可能會禁用客戶端的cookie功能。
2、Cookie是與瀏覽器相關的,即使是訪問同一個頁面,不同的瀏覽器儲存的cookie是不可以相互訪問的,
3、Cookie可能被刪除,因為cookie是儲存在硬碟上的檔案,所以有刪除的功能,想要抹除客戶端在網站的訪問記錄,就可通過刪除cookie的方式達到。
4、cookie的大小和個數是受限制的,單個cookie儲存的資料不可以超過4KB,很多瀏覽器都限制一個站點最多儲存20個cookie
5、cookie安全性不夠高,所有的cookie都是以純文字的形式記錄在檔案中,所以要是保使用者名稱和密碼,最好是通過加密的。
Session技術
Session技術是指使用HttpSession物件實現會話跟蹤技術,是一種在伺服器端保持會話跟蹤的方案HttpSession物件是javax.servlet.http.HttpSession介面的例項,也稱之為會話物件,該物件用於儲存單個使用者訪問時候的資訊,是伺服器在無狀態HTTP協議下用來識別和維護具體的某個使用者的主要形式。HttpSession物件會在使用者第一次訪問伺服器的時候由容器建立(當然只有在訪問JSP,Servlet等程式時才會建立,訪問HTML,IMAGE等靜態資源的時候是不會建立的)當用戶呼叫其失效方法(invalidate()方法)或者是超過其最大不活動時間就會失效,在此之間使用者與伺服器之間的多次請求都屬於一次會話
Session的優缺點:
- Session過多時會消耗伺服器資源
- 伺服器實現的 session 複製或 session 共享, 致命缺點:不好擴充套件和移植