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

Java Web 會話技術實戰:Cookie 與 Session 完整操作指南

     編輯:Java 綜合教學

會話基礎概念

  • 會話:開啟瀏覽器訪問網站到關閉瀏覽器的過程
  • HTTP 無狀態:需靠技術手段維持狀態
  • 兩大技術:客戶端 Cookie、伺服端 Session

Cookie 詳細操作

建立與寫入

Cookie cookie = new Cookie("name", "value");
response.addCookie(cookie);

讀取

Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) {
        if ("name".equals(c.getName())) {
            String value = c.getValue();
        }
    }
}

生命週期控制

  • 會話級 (預設):setMaxAge(-1),瀏覽器關閉失效,存記憶體
  • 持久級:setMaxAge(秒數) > 0,存硬碟
  • 刪除:setMaxAge(0) + 同名同路徑

路徑與域

cookie.setPath("/");           // 整個 Web 應用攜帶
cookie.setPath("/myapp");      // 僅 /myapp 路徑攜帶
cookie.setDomain(".example.com"); // 三方 Cookie (了解即可)

完整範例:記錄上次訪問時間

response.setContentType("text/html;charset=UTF-8");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sdf.format(new Date());

Cookie cookie = new Cookie("lastAccess", now);
cookie.setMaxAge(60 * 60 * 24 * 30); // 30 天
cookie.setPath("/day11_208/abc/accessTime");
response.addCookie(cookie);

String last = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie c : cookies) if ("lastAccess".equals(c.getName())) last = c.getValue();
}

if (last != null) out.write("上次訪問:" + last);
else out.write("首次訪問");

Session 詳細操作

獲取/建立

HttpSession session = request.getSession(); // 無則建立,有則返回
// 等同 request.getSession(true)
// request.getSession(false) 僅獲取不建立

內部靠 JSESSIONID 識別:首次建立 Session 並回傳 JSESSIONID Cookie;後續請求攜帶該 ID 查找 Session。

生命週期

  • 建立:首次 getSession()
  • 銷毀:伺服器關閉 / 超時 (預設 30 分鐘無操作) / session.invalidate()

Session 域操作

session.setAttribute("user", userObj);
User u = (User) session.getAttribute("user");
session.removeAttribute("user");

Session 持久化:跨瀏覽器關閉保持登入

// 手動建立 JSESSIONID Cookie 並設定過期時間
Cookie c = new Cookie("JSESSIONID", session.getId());
c.setPath("/home/");
c.setMaxAge(60 * 10); // 10 分鐘
response.addCookie(c);

URL 重寫:應對禁用 Cookie

HttpSession session = request.getSession();
String url = "/home/index.jsp";
url = response.encodeRedirectURL(url); // 自動附加 ;jsessionid=xxx
response.sendRedirect(url);

結果:https://localhost/home/index.jsp;jsessionid=377B2F05...

注意:所有需維持 Session 的頁面連結都必須經 encodeURL/encodeRedirectURL 處理。

總結對照

特性CookieSession
儲存位置客戶端伺服端
安全性較低 (可竄改)較高
容量限制單個 4KB、總量 300記憶體允許範圍
生命週期可持久化通常較短
相依性獨立依賴 Cookie (JSESSIONID)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved