JSP處理Cookie的方法詳解
一.什么是Cookies?
大家都知道,瀏覽器與WEB服務器之間是使用HTTP協議進行通信的,當某個用戶發出頁面請求時,WEB服務器只是簡單的進行響應,然后就關閉與該用戶的連接。因此當一個請求發送到WEB服務器時,無論其是否是第一次來訪,服務器都會把它當作第一次來對待,這樣的不好之處可想而知。為了彌補這個缺陷,Netscape開發出了cookie這個有效的工具來保存某個用戶的識別信息,因此人們昵稱為“小甜餅”。cookies是一種WEB服務器通過瀏覽器在訪問者的硬盤上存儲信息的手段:Netscape Navigator使用一個名為cookies.txt本地文件保存從所有站點接收的Cookie信息;而IE瀏覽器把Cookie信息保存在類似于C:\windows\cookies的目錄下。當用戶再次訪問某個站點時,服務端將要求瀏覽器查找并返回先前發送的Cookie信息,來識別這個用戶。
Cookies給網站和用戶帶來的好處非常多:
1、Cookie能使站點跟蹤特定訪問者的訪問次數、最后訪問時間和訪問者進入站點的路徑
2、Cookie能告訴在線廣告商廣告被點擊的次數 ,從而可以更精確的投放廣告
3、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的情況下進入曾經瀏覽過的一些站點
4、Cookie能幫助站點統計用戶個人資料以實現各種各樣的個性化服務
在JSP中,我們也可以使用Cookie,來編寫一些功能強大的應用程序。
下面,我想介紹一下如何用JSP處理Cookie和創建Cookie。
二.如何創建Cookie
說了這么多,大家一定很想知道JSP是如何創建cookie了。JSP處理Cookie是使用如下的語法格式來創建cookie的:
Cookie cookie_name =new Cookie("Parameter","Value");
例如:Cookie newCookie =new Cookie("username","waynezheng"); response.addCookie(newCookie);
解釋:JSP是調用Cookie對象相應的構造函數Cookie(name,value)用合適的名字和值來創建Cookie,然后 Cookie可以通過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭,本例中Cookie對象有兩個字符串參數:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符: @ : ;? , " / [ ] ( ) =
三. JSP處理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處理Cookie時,在Cookie發送到客戶端前,先要創建一個Cookie,然后用addCookie方法發送一個HTTP Header。 JSP將調用request.getCookies()從客戶端讀入Cookie,getCookies()方法返回一個HTTP請求頭中的內容對應的Cookie對象數組。你只需要用循環訪問該數組的各個元素,調用getName方法檢查各個Cookie的名字,直至找到目標Cookie,然后對該Cookie調用getValue方法取得與指定名字關聯的值 。
例如
- <%
- String userName=request.getParameter("username");//從提交的HTML表單中獲取,用戶名
- Cookie theUsername=new Cookie("username",userName);//以"username",userName值/對創建一個Cookie
- 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);
- deleteNewCookie.setPath("/");
- response.addCookie(deleteNewCookie);
- %>
這就是JSP處理Cookie的流程,但在實踐的開發過程中,還要考慮項目的需求和用戶的習慣等問題。
【編輯推薦】