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("首次訪問");
HttpSession session = request.getSession(); // 無則建立,有則返回 // 等同 request.getSession(true) // request.getSession(false) 僅獲取不建立
內部靠 JSESSIONID 識別:首次建立 Session 並回傳 JSESSIONID Cookie;後續請求攜帶該 ID 查找 Session。
getSession()session.invalidate()session.setAttribute("user", userObj);
User u = (User) session.getAttribute("user");
session.removeAttribute("user");
// 手動建立 JSESSIONID Cookie 並設定過期時間
Cookie c = new Cookie("JSESSIONID", session.getId());
c.setPath("/home/");
c.setMaxAge(60 * 10); // 10 分鐘
response.addCookie(c);
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 處理。
| 特性 | Cookie | Session |
|---|---|---|
| 儲存位置 | 客戶端 | 伺服端 |
| 安全性 | 較低 (可竄改) | 較高 |
| 容量限制 | 單個 4KB、總量 300 | 記憶體允許範圍 |
| 生命週期 | 可持久化 | 通常較短 |
| 相依性 | 獨立 | 依賴 Cookie (JSESSIONID) |