標籤:
為什麼需要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。一種是隱藏表
JAVA中SESSION和COOKIE的解釋