JAVA中SESSION和COOKIE的解釋


為什么需要cookie:
因為HTTP是無狀態的協議,所以我們在使用瀏覽器訪問網站的時候,服務器是怎樣來區別是哪個瀏覽器發送的請求呢,服務器是如何給不同的瀏覽器發送不同的信息,這就需要我們的cookie來解決問題了。
cookie機制是采用了一種在客戶端保存狀態的方案,他是用戶端的存儲機制,當然他也需要用戶端主動去開啟cookie支持。
session機制是采用一種在客戶端和服務器之間保持狀態的方案,這是怎樣的一種感念呢?如果我們在服務器端保存一個用戶訪問的標識,那么這種單一的保持我們還是無法辨別這是哪個客戶端發來的請求,所以我們仍然需要在客戶端保存一個相同服務器端的標識,所以session機制還需要借助cookie機制來達到他的目的。
cookie和session的工作原理:
cookie:當用戶訪問到網站時,用戶獲得不僅僅是這些頁面,同時也獲取了cookie,並且能夠保存在本地磁盤中,在cookie中記錄了每次用戶訪問站點的日期和時間信息或者是用戶名密碼等信息,用戶在和服務器進行請求響應的同時也在不斷交換其產生的cookie,並且用戶會將最新的cookie存儲在磁盤中,對於不同的網站,客戶端存儲不同的cookie信息。如果用戶在關閉掉瀏覽器后,再次請求相同的網站信息,瀏覽器便會在本地磁盤上查詢是否有於該URL相關聯的cookie,如果有那么瀏覽器便將這個cookie和你的請求信息一同發送給服務器。從上面的工作流程中我們可以發現,cookie是和站點相關聯的客戶端保存信息的機制。只要你訪問這個站點,就會用到你剛才保存的cookie。
session:當程序需要為某個客戶端的請求創建一個session的時候,服務器會首先檢查這個客戶端的請求里是否包含有一個session的標識,我們稱這個標識為sessionID,如果有那么就說明已經為客戶端創建過session,服務器端就會按照這個sessionID將這個session檢索出來(如果查找不到,就新建一個session),如果沒有那么我們就新建一個session,並生成一個相關聯的sessionID,並在本次響應中返回給客戶端,這個session在服務器端會將它保存起來,而在客戶端,我們怎樣做呢,這里就用到了cookie的工作方式將這個sessionID保存起來,這樣在當前用戶不關閉瀏覽器的請況下,我們就會按照規則將這個標志傳送給服務器。一般這個cookie的名字就類似於SESSIONID,這個sessionID的值是一個既不會重復,也沒有固定規則的隨機字符串。這里我們就發現了session和cookie的不同之處,session是和即時的會話相關聯的,如果你將瀏覽器關閉,那么你的這個sessionID也會跟隨着消失,這是為什么呢?有人說既然采用了cookie的保存方式為什么還會消失呢?因為他們的保存位置不同,在cookie的工作原理中我們看到了cookie是保存在本地磁盤的,而對於session呢,雖然我們采用了cookie的保存方式,但是並沒有將他保存在本地磁盤,而是將它保存在了瀏覽器緩存里,當然你將瀏覽器關閉之后,緩存清空,那么你保存的session當然就會消失。而此時服務器上保存的sessionID則還沒有刪除,這就迫使服務器給sessionID設定了一個超時時間,如果超過了這個超時時間,服務器就可以認為客戶端已經停止了活動,那么服務器自動刪除掉這個sessionID來節約服務器的存儲空間。而各個瀏覽器都有禁用cookie的功能,那么如果客戶端禁用掉了cookie的功能后,我們應該怎么辦呢?
通常會有以下三種方法:
一種URL重寫的技術,就是把session id直接附加在URL路徑的后面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現形式為http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一種是作為查詢字符串附加在URL后面,表現形式為http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
這兩種方式對於用戶來說是沒有區別的,只是服務器在解析的時候處理的方式不同,采用第一種方式也有利於把session id的信息和正常程序參數區分開來。
為了在整個會話的過程中始終保持狀態,那么就必須在每個客戶端請求服務器的路徑后面都要添加上essionID。
一種是隱藏表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM