說明:一直很佩服那些把知識研究的很透徹的人,用session很久了,但是cookie還沒怎麼用過,剛好手中接了一個任務,負責合作企業門戶網站開發,有一個訂單查閱子產品,查件曆史,當滑鼠懸浮上面的時候,顯示在目前浏覽器上查過單号的曆史記錄,這很明顯是cookie來實作的,借此機會研究一下。
1、Session是由應用伺服器維持的一個伺服器端的存儲空間,使用者在連接配接伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為辨別符來存取伺服器端的Session存儲空間。而SessionID這一資料則是儲存到用戶端,用Cookie儲存的,使用者送出頁面時,會将這一 SessionID送出到伺服器端,來存取Session資料。這一過程,是不用開發人員幹預的。是以一旦用戶端禁用Cookie,那麼Session也會失效。
伺服器也可以通過URL重寫的方式來傳遞SessionID的值,是以不是完全依賴Cookie。如果用戶端Cookie禁用,則伺服器可以自動通過重寫URL的方式來儲存Session的值,并且這個過程對程式員透明。
可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進制的字元串,是SessionID的值。
2、Cookie是用戶端的存儲空間,由浏覽器來維持
擷取Cookie的代碼:
cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null)
out.println("Has not visited this website");
}
else
{
for (int i = 0; i < cookie.length; i++)
{
out.println("cookie name:" + cookies[i].getName() + "cookie value:" +
cookie[i].getValue());
}
}
運作結果:
cookie name:JSESSIONID cookie value:KWJHUG6JJM65HS2K6
3、為什麼會有Cookie
http是無狀态的協定,客戶每次讀取web頁面時,伺服器都打開新的會話,而且伺服器也不會自動維護客戶的上下文資訊,那麼要怎麼才能實作網上商店中的購物車呢,session就是一種儲存上下文資訊的機制,它是針對每一個使用者的,變量的值儲存在伺服器端,通過SessionID來區分不同的客戶,session是以cookie或URL重寫為基礎的,預設使用cookie來實作,系統會創造一個名為JSESSIONID的輸出cookie,我們叫做session cookie,以差別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲于浏覽器記憶體中的,并不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把浏覽器的cookie禁止後,web伺服器會采用URL重寫的方式傳遞Sessionid,我們就可以在位址欄看到sessionid=KWJHUG6JJM65HS2K6之類的字元串。
作者:no-npe 出處:https://www.cnblogs.com/geekdc 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此聲明,且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權利。 由于作者個人水準有限,如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。 |