Web編程-->Cookie和Session的區別

一、cookie機制和session機制的區別
*************************************************************************************
      具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。
      同時我們也看到,由於才服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇。

 

二、會話cookie和持久cookie的區別
*************************************************************************************
      如果不設置過期時間,則表示這個cookie生命週期爲瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期爲瀏覽會話期的cookie被稱爲會話cookie。會話cookie一般不保存在硬盤上而是保存在內存裏。
  如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。
  存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器有不同的處理方式。

 

三、如何利用實現自動登錄
*************************************************************************************
  當用戶在某個網站註冊後,就會收到一個惟一用戶ID的cookie。客戶後來重新連接時,這個
用戶ID會自動返回,服務器對它進行檢查,確定它是否爲註冊用戶且選擇了自動登錄,從而使用戶務需給出明確的用戶名和密碼,就可以訪問服務器上的資源。

 

四、如何根據用戶的愛好定製站點
*************************************************************************************
  網站可以使用cookie記錄用戶的意願。對於簡單的設置,網站可以直接將頁面的設置存儲在cookie中完成定製。然而對於更復雜的定製,網站只需僅將一個惟一的標識符發送給用戶,由服務器端的數據庫存儲每個標識符對應的頁面設置。

 

五、cookie的發送
*************************************************************************************
      1.創建Cookie對象
      2.設置最大時效
      3.將Cookie放入到HTTP響應報頭
      如果你創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之後被刪除。如果你希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,並給出一個以秒爲單位的時間。將最大時效設爲0則是命令瀏覽器刪除該cookie。
      發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個Set-Cookie HTTP請求報頭中。由於這個方法並不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此我們將這個方法稱爲是addCookie,而非setCookie。同樣要記住響應報頭必須在任何文檔內容發送到客戶端之前設置。

 

六、cookie的讀取
*************************************************************************************
      1.調用request.getCookies

      要獲取有瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。
      2.對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie爲止,cookie與你的主機(域)相關,而非你的servlet或JSP頁面。因而,儘管你的servlet可能只發送了單個cookie,你也可能會得到許多不相關的cookie。
例如:
  String cookieName = “userID”;
      Cookie cookies[] = request.getCookies();
      if (cookies!=null){
               for(int i=0;i<cookies.length;i++){
                       Cookie cookie = cookies[i];
                       if (cookieName.equals(cookie.getName())){
                             doSomethingWith(cookie.getValue());
                       }
               }
      }

 

七、如何使用cookie檢測初訪者
*************************************************************************************
      A.調用HttpServletRequest.getCookies()獲取Cookie數組
      B.在循環中檢索指定名字的cookie是否存在以及對應的值是否正確
      C.如果是則退出循環並設置區別標識
      D.根據區別標識判斷用戶是否爲初訪者從而進行不同的操作

 

八、使用cookie檢測初訪者的常見錯誤
*************************************************************************************
      不能僅僅因爲cookie數組中不存在在特定的數據項就認爲用戶是個初訪者。如果cookie數組爲null,客戶可能是一個初訪者,也可能是由於用戶將cookie刪除或禁用造成的結果。
      但是,如果數組非null,也不過是顯示客戶曾經到過你的網站或域,並不能說明他們曾經訪問過你的servlet。其它servlet、JSP頁面以及非Java Web應用都可以設置cookie,依據路徑的設置,其中的任何cookie都有可能返回給用戶的瀏覽器。
      正確的做法是判斷cookie數組是否爲空且是否存在指定的Cookie對象且值正確。

 

九、使用cookie屬性的注意問題
*************************************************************************************
  屬性是從服務器發送到瀏覽器的報頭的一部分;但它們不屬於由瀏覽器返回給服務器的報頭。 
  因此除了名稱和值之外,cookie屬性只適用於從服務器輸出到客戶端的cookie;服務器端來自於瀏覽器的cookie並沒有設置這些屬性。 
  因而不要期望通過request.getCookies得到的cookie中可以使用這個屬性。這意味着,你不能僅僅通過設置cookie的最大時效,發出它,在隨後的輸入數組中查找適當的cookie,讀取它的值,修改它並將它存回Cookie,從而實現不斷改變的cookie值。

 

十、如何使用cookie記錄各個用戶的訪問計數
*************************************************************************************
      1.獲取cookie數組中專門用於統計用戶訪問次數的cookie的值
      2.將值轉換成int型
      3.將值加1並用原來的名稱重新創建一個Cookie對象
      4.重新設置最大時效
      5.將新的cookie輸出

 

十一、session在不同環境下的不同含義
*************************************************************************************
      session,中文經常翻譯爲會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話是從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之爲一個session。
      然而當session一詞與網絡協議相關聯時,它又往往隱含了“面向連接”和/或“保持狀態”這樣兩個含義。
  session在Web開發環境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與服務器端之間保持狀態的解決方案。有時候session也用來指這種解決方案的存儲結構。

 

十二、session的機制
*************************************************************************************
  session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
      但程序需要爲某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求裏是否包含了一個session標識-稱爲session id,如果已經包含一個session id則說明以前已經爲此客戶創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個,這種情況可能出現在服務端已經刪除了該用戶對應的session對象,但用戶人爲地在請求的URL後面附加上一個JSESSION的參數)。
      如果客戶請求不包含session id,則爲此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/grj_lw_114/archive/2009/12/13/4999972.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章