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實現機制)
安全