首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JSP 內建物件:Cookie 的完整操作指南

     編輯:Java 相關知識

什麼是 Cookie?

Cookie 是伺服器發送給客戶端瀏覽器的小型純文字資料。當使用者再次造訪同一個 Web 伺服器時,瀏覽器會自動將這些 Cookie 送回伺服器。透過讓伺服器讀取先前儲存在客戶端的資訊,可以為瀏覽者提供諸多便利,例如:線上交易中識別使用者身分、在安全性要求不高的場合免除重複輸入帳號密碼、入口網站首頁客製化、精準投放廣告等。

Cookie 的限制與安全性考量

雖然 Cookie 能帶來便利,但在安全性要求較高的場合,建議避免使用 Cookie。此外,瀏覽器對 Cookie 的儲存有明確限制:最多 300 個 Cookie,單一站點最多 20 個,每個 Cookie 大小上限 4 KB,因此不必擔心佔用過多硬碟空間。

Cookie 的基本操作流程

Cookie 儲存在客戶端,操作步驟為:先建立 Cookie 物件、設定其屬性,再透過 response 物件的 addCookie() 方法將其寫入客戶端;讀取時則呼叫 request 物件的 getCookies() 方法取得 Cookie 陣列。

1. 建立 Cookie

使用 Cookie 類別的建構函式即可建立:

Cookie(String cookieName, String cookieValue)

參數 cookieName 為 Cookie 名稱,cookieValue 為其值。名稱與值皆不得包含空白字元及以下符號:[ ] ( ) = , " / ? @ :

2. 設定與讀取 Cookie 屬性

在將 Cookie 加入回應標頭前,可透過以下方法查看或設定屬性:

  • getComment()/setComment():取得/設定 Cookie 註解。
  • getDomain()/setDomain():取得/設定適用域。域名需以點開頭(如 .sitename.com),非國家級域(.com、.edu、.gov)需含兩個點,國家級域(.com.cn、.edu.uk)需含三個點。預設僅回傳給發送 Cookie 的伺服器。
  • getMaxAge()/setMaxAge():取得/設定 Cookie 過期時間(秒)。若不設定,則僅在當前會話有效(瀏覽器關閉即失效),且不會寫入硬碟。
  • getName()/setName():取得/設定 Cookie 名稱。名稱與值是開發者最關心的兩個屬性。因 getCookies() 回傳 Cookie 陣列,通常需迴圈尋找特定名稱,再用 getValue() 取值。
  • getPath()/setPath():取得/設定適用路徑。未指定時,Cookie 會回傳給當前頁面所在目錄及其子目錄下的所有頁面。設定 setPath("/") 可讓伺服器上所有頁面接收該 Cookie。
  • getSecure()/setSecure():取得/設定是否僅透過加密連線(SSL)傳送。
  • getValue()/setValue():取得/設定 Cookie 值。名稱與值是核心關注點,但也有以名稱作為邏輯標記的用法(存在即為 true)。
  • getVersion()/setVersion():取得/設定 Cookie 遵循的協定版本。預設版本 0(Netscape 規範),版本 1 遵循 RFC 2109,但支援度有限。

3. 將 Cookie 加入 HTTP 回應標頭

使用 response.addCookie() 將 Cookie 寫入 Set-Cookie 標頭:

Cookie usernameCookie = new Cookie("username", "dzycsai");
response.addCookie(usernameCookie);

4. 讀取 Cookie

呼叫 request.getCookies() 取得對應 HTTP 請求標頭的 Cookie 陣列。通常以迴圈遍歷陣列,用 getName() 比對目標名稱,找到後再呼叫 getValue() 取得值並進行後續處理。

5. Cookie 通用工具方法

為簡化從陣列中尋找指定 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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved