Cookie 原理及做用

      Cookie的含義是「服務器送給瀏覽器的甜點」,即服務器在響應請求時能夠將一些數據以「鍵-值」對的形式經過響應信息保存在客戶端。當瀏覽器再次訪問服務器中相同的應用時,會將以前的Cookie經過請求信息帶到服務器端。
html

下面的Servlet展現了Cookie的功能。  
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)    
                     throws ServletException, IOException {    
          response.setContentType("text/html");    
          PrintWriter out = response.getWriter();    
          String option = request.getParameter("option");    
          if ("show".equals(option)) {    
              //得到請求信息中的Cookie數據    
              Cookie[] cookies = request.getCookies();    
              if (cookies != null) {    
                  //找出名稱(鍵)爲「cool」的Cookie    
                  for (int i = 0; i < cookies.length; i++) {    
                      if ("cool".equals(cookies[i].getName())) {    
                          out.println("<h2>" + cookies[i].getName() + ":"    
                              + cookies[i].getValue() + "</h2>");    
                       }    
                  }    
             }    
          } else if ("add".equals(option)) {    
              //建立Cookie對象    
              Cookie cookie = new Cookie("cool", "yeah!");    
              //設置生命週期以秒爲單位    
              cookie.setMaxAge(20);    
              //添加Cookie    
              response.addCookie(cookie);    
         }     
  
  
該Servlet對應的url-pattern爲/testCookie  
當瀏覽器請求地址「.../tst/testCookie?option=add」時,該Servlet建立一個Cookie對象,存儲的鍵-值對爲
「cool」-「yeah」。經過response的addCookie方法將該Cookie信息添加到相應信息中。須要注意的是cookie的
setMaxAge方法用於設置該cookie生命週期,單位是秒,若是過了這個期間,Cookie將失效。setMaxAge方法的參數若是爲負值則表
示該Cookie將在瀏覽器關閉時過時,若是參數爲0則表示馬上刪除該Cookie。訪問該地址,對應的請求和響應的HTTP信息爲:  

請求:  
GET /tst/testCookie?option=add HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, **  
Accept-Language: zh-cn  
UA-CPU: x86  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)  
Host: 192.168.5.100:8080  
Connection: Keep-Alive  
Cookie: cool=yeah!  

響應:  
HTTP/1.1 200 OK  
Server: Apache-Coyote/1.1  
Content-Type: text/html;charset=ISO-8859-1  
Content-Length: 21  
Date: Sun, 29 Jun 2008 06:15:26 GMT  
<h2>cool:yeah!</h2>  
注意,請求協議頭中用於攜帶cookie信息的格式。

    

       Cookie能夠用於保持用戶的會話狀態,但Cookie信息保存在客戶端,存在較大的安全隱患,且通常瀏覽器對Cookie的數目及數據大小有嚴格的限制。在Web應用中,通常狀況下經過HttpSession對象保持會話狀態。  java

      每一個Cookie均可以設置一個最大生命週期,若是設置了該值,瀏覽器將會把該Cookie寫到硬盤上。若是沒有設置Cookie的最大生命週期,這樣的Cookie稱爲會話Cookie,它存在內存中,當瀏覽器關閉時,該Cookie消失。瀏覽器

下一篇介紹(session實現機制) 
安全

相關文章
相關標籤/搜索