JSP 頁面中對Cookie的操做

一.什麼是cookies?java

  你們都知道,瀏覽器與WEB服務器之間是使用HTTP協議進行通訊的,當某個用戶發出頁面請求時,WEB服務器只是簡單的進行響應,而後就關閉與該用戶的鏈接。所以當一個請求發送到WEB服務器時,不管其是不是第一次來訪,服務器都會把它看成第一次來對待,這樣的很差之處可想而知。爲了彌補這個缺陷,Netscape開發出了cookie這個有效的工具來保存某個用戶的識別信息,所以人們暱稱爲「小甜餅」。cookies是一種WEB服務器經過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個名爲cookies.txt本地文件保存從全部站點接收的Cookie信息;而IE瀏覽器把Cookie信息保存在相似於C://windows//cookies的目錄下。當用戶再次訪問某個站點時,服務端將要求瀏覽器查找並返回先前發送的Cookie信息,來識別這個用戶。windows

  cookies給網站和用戶帶來的好處很是多:數組

  一、Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑
  二、Cookie能告訴在線廣告商廣告被點擊的次數,從而能夠更精確的投放廣告瀏覽器

  三、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的狀況下進入曾經瀏覽過的一些站點安全

  四、Cookie能幫助站點統計用戶我的資料以實現各類各樣的個性化服務服務器

  在JSP中,咱們也可使用Cookie,來編寫一些功能強大的應用程序。cookie

  下面,我想介紹一下如何用JSP建立和處理Cookie。網絡

  二.如何建立Cookie

   import="javax.servlet.http.Cookie"函數

  說了這麼多,你們必定很想知道JSP是如何建立cookie了。JSP是使用以下的語法格式來建立cookie的:工具

  Cookie cookie_name =new Cookie("Parameter","Value");

  例如:

Cookie username_Cookie =new Cookie("username","waynezheng");
response.addCookie(username_Cookie);

  解釋:JSP是調用Cookie對象相應的構造函數Cookie(name,value)用合適的名字和值來建立Cookie,而後Cookie能夠經過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭

本例中Cookie對象有兩個字符串參數:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符:@ : ;? , " / [ ] ( ) =

  處理Cookie的屬性

  看到這裏,有的朋友又要問了:我光知道如何建立Cookie有什麼用呀?是呀,光知道如何建立Cookie而不知道怎麼使用是不夠的。

在JSP中,程序是經過cookie.setXXX設置各類屬性,用cookie.getXXX讀出cookie的屬性,如今把Cookie的主要屬性,及其方法列於下,供你們參考:

  

類型 方法名 方法解釋
String getComment() 返回cookie中註釋,若是沒有註釋的話將返回空值.
String getDomain() 返回cookie中Cookie適用的域名. 使用getDomain() 方法能夠指示瀏覽器把Cookie返回給同 一域內的其餘服務器,而一般Cookie只返回給與發送它的服務器名字徹底相同的服務器。注意域名必須以點開始(例如.yesky.com)
int getMaxAge() 返回Cookie過時以前的最大時間,以秒計算。
String getName() 返回Cookie的名字。名字和值是咱們始終關心的兩個部分,筆者會在後面詳細介紹 getName/setName。
String getPath() 返回Cookie適用的路徑。若是不指定路徑,Cookie將返回給當前頁面所在目錄及其子目錄下 的全部頁面。
boolean getSecure() 若是瀏覽器經過安全協議發送cookies將返回true值,若是瀏覽器使用標準協議則返回false值。
String getValue() 返回Cookie的值。筆者也將在後面詳細介紹getValue/setValue。
int getVersion() 返回Cookie所聽從的協議版本。
void setComment(String purpose) 設置cookie中註釋。
void setDomain(String pattern) 設置cookie中Cookie適用的域名
void setMaxAge(int expiry) 以秒計算,設置Cookie過時時間。
void setPath(String uri) 指定Cookie適用的路徑。
void setSecure(boolean flag) 指出瀏覽器使用的安全協議,例如HTTPS或SSL。
void setValue(String newValue) cookie建立後設置一個新的值。
void setVersion(int v) 設置Cookie所聽從的協議版本。   
 
  讀取客戶端的Cookie

  在Cookie發送到客戶端前, 先要建立一個Cookie,而後用addCookie方法發送一個HTTP Header。JSP將調用 request.getCookies()從客戶端讀入Cookie,getCookies()方法返回一個HTTP請求頭中的內容對應的 Cookie對象數組。你只須要用循環訪問該數組的各個元素,調用getName方法檢查各個Cookie的名字,直至找到目標Cookie,而後對該Cookie調用getValue方法取得與指定名字關聯的值。
  例如
  <%
   //從提交的HTML表單中獲取,用戶名
   String userName=request.getParameter("username");


   //以"username", userName 值/對 建立一個Cookie
   Cookie theUsername=new Cookie("username",userName);


   response.addCookie(theUsername);
  %>
  ..............
  <%
   Cookie myCookie[]=request.getCookies();//建立一個Cookie對象數組

   for(int n=0;n=cookie.length-1;i++);//設立一個循環,來訪問Cookie對象數組的每個元素

   Cookie newCookie= myCookie[n];

   if(newCookie.getName().equals("username")); //判斷元素的值是否爲username中的值
    {%>
     你好,<%=newCookie.getValue()%>!//若是找到後,向他問好
    <%}
  %>

  設置Cookie的存在時間,及刪除Cookie

   在JSP中,使用 setMaxAge(int expiry)方法來設置Cookie的存在時間,參數expiry應是一個整數。正值表示cookie將在這麼多秒之後失效。注意這個值是cookie將要存在的最大時間,而不是cookie如今的存在時間。 負值表示當瀏覽器關閉時,Cookie將會被刪除。零值則是要刪除該Cookie。如:  
  <%
   Cookie deleteNewCookie=new Cookie("newcookie",null);
   deleteNewCookie.setMaxAge(0); // 刪除該Cookie
   deleteNewCookie.setPath("/");
   response.addCookie(deleteNewCookie);
  %>  

1、 前言

提及來,Cookie應該是一種應用較久的技術了。早在HTML剛剛出現的時候,在每一個獨立的頁面之間沒有辦法記錄和標識不一樣的用戶。後來人們就發明了Cookie技術,當用戶訪問網頁時,它可以在訪問者的機器上創立一個文件,咱們把它叫做Cookie,寫一段內容進去,來標識不一樣的用戶。若是下次用戶再訪問這個網頁的時候,它又可以讀出這個文件裏面的內容,這樣網頁就知道上次這個用戶已經訪問過該網頁了。

雖然如今網頁的製做技術比起幾年之前已經發展了許多。不過有些時候,Cookie仍是可以幫咱們不少忙的。接下來,咱們就來看看,如何在寫JSP文件的時候,用JSP操做Cookie。
=======================================

2、 保存寫入Cookie

其實用JSP操做Cookie是很是簡單的,咱們來看下面一段JSP程序:

........(中間略)

//保存寫入Cookie
<%
String cookieName="Sender";
Cookie cookie=new Cookie(cookieName, "Test_Content");
cookie.setMaxAge(10);   //存活期爲10秒
response.addCookie(cookie);
%>

........(其餘內容)


這樣咱們就設置了一個Cookie,很簡單吧?

咱們來仔細研究一下這段代碼:

  Cookie cookie=new Cookie(cookieName, "Test_Content");

這一行創建了一個Cookie對象,初始化有兩個參數,第一個參數cookieName定義了Cookie的名字,後一個參數,也是一個字符串,定義了Cookie的內容。也就是咱們但願網頁在用戶的機器上標識的文件內容。

接下來一行:cookie.setMaxAge(10),調用了Cookie中的setMaxAge方法,設定Cookie在用戶機器硬盤上的存活期爲10秒。一個Cookie在用戶的硬盤裏面存在的時間並非無限期的,在創建Cookie對象的時候,咱們必須制定Cookie的存活期,超過了這個存活期後,Cookie文件就再也不起做用,會被用戶的瀏覽器自行刪除。若是咱們但願用戶在下次訪問這個頁面的時候,Cookie文件仍然有效並且能夠被網頁讀出來的話,咱們能夠將Cookie的存活期設得稍微長一些。好比cookie.setMaxAge(365*24*60*60)可讓Cookie文件在一年內有效。

3、 讀取出Cookie

Cookie文件建立好後,天然還須要咱們把它讀出來,不然咱們不是白費力氣嗎?接下來咱們看看如何讀出在用戶硬盤上的Cookie。

........(中間略)

Name value

<%
Cookie cookies[]=request.getCookies(); //讀出用戶硬盤上的Cookie,並將全部的Cookie放到一個cookie對象數組裏面
Cookie sCookie=null;
String svalue=null;
String sname=null;

for(int i=0;i<cookies.length-1;i++{    //用一個循環語句遍歷剛纔創建的Cookie對象數組
sCookie=cookies[i];   //取出數組中的一個Cookie對象

sname=sCookie.getName(); //取得這個Cookie的名字
svalue=sCookie.getValue(); //取得這個Cookie的內容
%>

<%
}
%>

  name    value
<%=name%> <%=svalue%>

........(其餘內容)

這一小段JSP文件能夠讀出用戶硬盤上的全部有效的Cookie,也就是仍然在存活期內的Cookie文件。並用表格的形式列出每一個Cookie的名字和內容。

咱們來逐行分析一下這段代碼:
Cookie cookies[]=request.getCookies() 咱們用request.getCookies()讀出用戶硬盤上的Cookie,並將全部的Cookie放到一個cookie對象數組裏面。
接下來咱們用一個循環語句遍歷剛纔創建的Cookie對象數組,咱們用sCookie=cookies[i]取出數組中的一個Cookie對象,而後咱們用sCookie.getValue()和sCookie.getName()兩個方法來取得這個Cookie的名字和內容。

經過將取出來的Cookie的名字和內容放在字符串變量中,咱們就能對其進行各類操做了。在上面的例子裏,可經過循環語句的遍歷,將全部Cookie放在一張表格中進行顯示。
=======================================

4、 須要注意的一些問題

經過上面兩個簡單的例子,能夠看到,用JSP進行Cookie的操做,是很是簡單的。不過咱們在實際操做中還要注意一些問題:

1. Cookie的兼容性問題

Cookie的格式有2個不一樣的版本,第一個版本,咱們稱爲Cookie Version 0,是最初由Netscape公司制定的,也被幾乎全部的瀏覽器支持。而較新的版本,Cookie Version 1,則是根據RFC 2109文檔制定的。爲了確保兼容性,JAVA規定,前面所提到的涉及Cookie的操做都是針對舊版本的Cookie進行的。而新版本的Cookie目前還不被Javax.servlet.http.Cookie包所支持。

2. Cookie的內容

一樣的Cookie的內容的字符限制針對不一樣的Cookie版本也有不一樣。在Cookie Version 0中,某些特殊的字符,例如:空格,方括號,圓括號,等於號(=),逗號,雙引號,斜槓,問號,@符號 ,冒號,分號都不能做爲Cookie的內容。這也就是爲何咱們在例子中設定Cookie的內容爲"Test_Content"的緣由。

雖然在Cookie Version 1規定中放寬了限制,可使用這些字符,可是考慮到新版本的Cookie規範目前仍然沒有爲全部的瀏覽器所支持,於是爲保險起見,咱們應該在Cookie的內容中儘可能避免使用這些字符。(karry/大衆網絡報)

相關文章
相關標籤/搜索