一.什麼是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仍是可以幫咱們不少忙的。接下來,咱們就來看看,如何在寫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/大衆網絡報)