1. 程式人生 > >JSP Cookies 處理

JSP Cookies 處理

  JSP Cookies 處理

  Cookies是儲存在客戶機的文字檔案,它們儲存了大量軌跡資訊。在servlet技術基礎上,JSP顯然能夠提供對HTTP cookies的支援。

  通常有三個步驟來識別回頭客:

  伺服器指令碼傳送一系列cookies至瀏覽器。比如名字,年齡,ID號碼等等。

  瀏覽器在本地機中儲存這些資訊,以備不時之需。

  當下一次瀏覽器傳送任何請求至伺服器時,它會同時將這些cookies資訊傳送給伺服器,然後伺服器使用這些資訊來識別使用者或者幹些其它事情。

  本章節將會傳授您如何去設定或重設cookie的方法,還有如何訪問它們及如何刪除它們。

  Cookie剖析

  Cookies通常在HTTP資訊頭中設定(雖然JavaScript能夠直接在瀏覽器中設定cookies)。在JSP中,設定一個cookie需要傳送如下的資訊頭給伺服器:

  HTTP/1.1 200 OK

  Date: Fri, 04 Feb 2000 21:03:38 GMT

  Server: Apache/1.3.9 (UNIX) PHP/4.0b3

  Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT;

  path=/; domain=tutorialspoint.com

  Connection: close

  Content-Type: text/html

  正如您所見,Set-Cookie資訊頭包含一個鍵值對,一個GMT(格林尼治標準)時間,一個路徑,一個域名。鍵值對會被編碼為URL。有效期域是個指令,告訴瀏覽器在什麼時候之後就可以清除這個cookie。

  如果瀏覽器被配置成可儲存cookies,那麼它將會儲存這些資訊直到過期。如果使用者訪問的任何頁面匹配了cookie中的路徑和域名,那麼瀏覽器將會重新將這個cookie發回給伺服器。瀏覽器端的資訊頭長得就像下面這樣:

  GET / HTTP/1.0

  Connection: Keep-Alive

  User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)

  Host: zink.demon.co.uk:1126

  Accept: image/gif, */*

  Accept-Encoding: gzip

  Accept-Language: en

  Accept-Charset: iso-8859-1,*,utf-8

  Cookie: name=xyz

  JSP指令碼通過request物件中的getCookies()方法來訪問這些cookies,這個方法會返回一個Cookie物件的陣列。

  Servlet Cookies 方法

  下表列出了Cookie物件中常用的方法:

  序號方法 & 描述

  1public void setDomain(String pattern)

  設定cookie的域名,比如w3cschool.cc

  2public String getDomain()

  獲取cookie的域名,比如w3cschool.cc

  3public void setMaxAge(int expiry)

  設定cookie有效期,以秒為單位,預設有效期為當前session的存活時間

  4public int getMaxAge()

  獲取cookie有效期,以秒為單位,預設為-1 ,表明cookie會活到瀏覽器關閉為止

  5public String getName()

  返回 cookie的名稱,名稱建立後將不能被修改

  6public void setValue(String newValue)

  設定 cookie的值

  7public String getValue()

  獲取cookie的值

  8public void setPath(String uri)

  設定cookie 的路徑,預設為當前頁面目錄下的所有URL,還有此目錄下的所有子目錄

  9public String getPath()

  獲取cookie 的路徑

  10public void setSecure(boolean flag)

  指明cookie是否要加密傳輸

  11public void setComment(String purpose)

  設定註釋描述 cookie的目的。當瀏覽器將cookie展現給使用者時,註釋將會變得非常有用

  12public String getComment()

  返回描述cookie目的的註釋,若沒有則返回null

  使用JSP設定Cookies

  使用JSP設定cookie包含三個步驟:

  (1)建立一個Cookie物件: 呼叫Cookie的建構函式,使用一個cookie名稱和值做引數,它們都是字串。

  Cookie cookie = new Cookie("key","value");

  請務必牢記,名稱和值中都不能包含空格或者如下的字元:

  [ ] ( ) = , " / ? @ : ;

  (2) 設定有效期:呼叫setMaxAge()函式表明cookie在多長時間(以秒為單位)內有效。下面的操作將有效期設為了24小時。

  cookie.setMaxAge(60*60*24);

  (3) 將cookie傳送至HTTP響應頭中:呼叫response.addCookie()函式來向HTTP響應頭中新增cookies。

  response.addCookie(cookie);

  例項演示

  <%

  // 為 first_name 和 last_name設定cookie

  Cookie firstName = new Cookie("first_name",

  request.getParameter("first_name"));

  Cookie lastName = new Cookie("last_name",

  request.getParameter("last_name"));

  // 設定cookie過期時間為24小時。

  firstName.setMaxAge(60*60*24);

  lastName.setMaxAge(60*60*24);

  // 在響應頭部新增cookie

  response.addCookie( firstName );

  response.addCookie( lastName );

  %>

  

  

  

  

  

  

 

  

Setting Cookies

 

  

 

  

 

  

    • First Name:

        <%= request.getParameter("first_name")%>

        

 

  

    • Last Name:

        <%= request.getParameter("last_name")%>

        

 

  

 

  

  

  將上面兩個檔案放在<tomcat安裝目錄>/webapps/ROOT目錄下,然後訪問http://localhost:8080/hello.jsp,將會得到如下輸出結果:

  試著輸入First Name和Last Name,然後點選提交按鈕,它將會在您的螢幕中顯示first name和last name,並且設定first name和last name兩個cookie,下一次點選提交按鈕時會發給伺服器。

  使用JSP讀取Cookies

  想要讀取cookies,您就需要呼叫request.getCookies()方法來獲得一個javax.servlet.http.Cookie物件的陣列,然後遍歷這個陣列,使用getName()方法和getValue()方法來獲取每一個cookie的名稱和值。

  讓我們來讀取上個例子中的cookies。

  

  

  

  

  

  

 

  

Reading Cookies

 

  

 

  <%

  Cookie cookie = null;

  Cookie[] cookies = null;

  // 獲取cookies的資料,是一個數組

  cookies = request.getCookies();

  if( cookies != null ){

  out.println("

Found Cookies Name and Value

");

 

  for (int i = 0; i < cookies.length; i++){

  cookie = cookies[i];

  out.print("Name : " + cookie.getName( ) + ", ");

  out.print("Value: " + cookie.getValue( )+"
");

  }

  }else{

  out.println("

No cookies founds

");

 

  }

  %>

  

  

  如果您把first name cookie設定成"John",last name設定成"Player",訪問 http://localhost:8080/main.jsp,將會得到如下輸出結果:

  Found Cookies Name and Value

  Name : first_name, Value: John

  Name : last_name, Value: Player

  使用JSP刪除Cookies

  刪除cookies非常簡單。如果您想要刪除一個cookie,按照下面給的步驟來做就行了:

  獲取一個已經存在的cookie然後儲存在Cookie物件中。

  將cookie的有效期設定為0。

  將這個cookie重新新增進響應頭中。

  例項演示

  下面的程式刪除一個名為"first_name"的cookie,當您下次執行main.jsp時,first_name將會為null。

  

  

  

  

  

  

 

  

Reading Cookies

 

  

 

  <%

  Cookie cookie = null;

  Cookie[] cookies = null;

  // 獲取當前域名下的cookies,是一個數組

  cookies = request.getCookies();

  if( cookies != null ){

  out.println("

Found Cookies Name and Value

");

 

  for (int i = 0; i < cookies.length; i++){

  cookie = cookies[i];

  if((cookie.getName( )).compareTo("first_name") == 0 ){

  cookie.setMaxAge(0);

  response.addCookie(cookie);

  out.print("Deleted cookie: " +

  cookie.getName( ) + "
");

  }

  out.print("Name : " + cookie.getName( ) + ", ");

  out.print("Value: " + cookie.getValue( )+"
");

  }

  }else{

  out.println(

  "

No cookies founds

");

 

  }

  %>

  

  

  訪問它,將會得到如下輸出結果:

  Cookies Name and Value

  Deleted cookie : first_name

  Name : first_name, Value: John

  Name : last_name, Value: Player

  再次訪問http://localhost:8080/main.jsp,將會得到如下結果:

  Found Cookies Name and Value

  Name : last_name, Value: Player

  您也可以手動在瀏覽器中刪除cookies。點選Tools選單項,然後選擇Internet Options,點選Delete Cookies,就能刪除所有cookies了。

  (編輯:雷林鵬 來源:網路)