Cookie 是伺服器發送給客戶端瀏覽器的小型純文字資料。當使用者再次造訪同一個 Web 伺服器時,瀏覽器會自動將這些 Cookie 送回伺服器。透過讓伺服器讀取先前儲存在客戶端的資訊,可以為瀏覽者提供諸多便利,例如:線上交易中識別使用者身分、在安全性要求不高的場合免除重複輸入帳號密碼、入口網站首頁客製化、精準投放廣告等。
雖然 Cookie 能帶來便利,但在安全性要求較高的場合,建議避免使用 Cookie。此外,瀏覽器對 Cookie 的儲存有明確限制:最多 300 個 Cookie,單一站點最多 20 個,每個 Cookie 大小上限 4 KB,因此不必擔心佔用過多硬碟空間。
Cookie 儲存在客戶端,操作步驟為:先建立 Cookie 物件、設定其屬性,再透過 response 物件的 addCookie() 方法將其寫入客戶端;讀取時則呼叫 request 物件的 getCookies() 方法取得 Cookie 陣列。
使用 Cookie 類別的建構函式即可建立:
Cookie(String cookieName, String cookieValue)
參數 cookieName 為 Cookie 名稱,cookieValue 為其值。名稱與值皆不得包含空白字元及以下符號:[ ] ( ) = , " / ? @ :
在將 Cookie 加入回應標頭前,可透過以下方法查看或設定屬性:
.sitename.com),非國家級域(.com、.edu、.gov)需含兩個點,國家級域(.com.cn、.edu.uk)需含三個點。預設僅回傳給發送 Cookie 的伺服器。getCookies() 回傳 Cookie 陣列,通常需迴圈尋找特定名稱,再用 getValue() 取值。setPath("/") 可讓伺服器上所有頁面接收該 Cookie。使用 response.addCookie() 將 Cookie 寫入 Set-Cookie 標頭:
Cookie usernameCookie = new Cookie("username", "dzycsai");
response.addCookie(usernameCookie);
呼叫 request.getCookies() 取得對應 HTTP 請求標頭的 Cookie 陣列。通常以迴圈遍歷陣列,用 getName() 比對目標名稱,找到後再呼叫 getValue() 取得值並進行後續處理。
為簡化從陣列中尋找指定 Cookie 的操作,可封裝如下工具函式:
String getCookieValue(Cookie[] cookies, String cookieName, String defaultValue) {
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())) {
return cookie.getValue();
}
}
return defaultValue;
}
參數說明:第一個為 Cookie 陣列(可用 request.getCookies() 取得),第二個為欲查找的 Cookie 名稱,第三個為找不到時的預設回傳值。
《JSP 網路程式設計從實踐到實踐》原始碼下載:https://shop.csai.cn/itbook/itbookinfo.ASP?lbbh=10051575