一. 常用Cookie API介紹
1. 獲取cookie
request.getCookies(); // 返回Cookie[]
2. 創建cookie
Cookie(String key, String value); // 通過構造器創建
3. 返回cookie給用戶瀏覽器
response.addCookie(Cookie cookie);
4. 設置cookie的有效期
cookie.setMaxAge(int sec);
1) 單位: 秒
2) 默認cookie有效期為一個會話, 存儲在瀏覽器緩存中, 即關閉瀏覽器cookie被刪除
3) 設置了有效期的cookie, 即使關閉了瀏覽器, 也不會被刪除, 即存儲在硬盤上, 通常是在瀏覽器緩存目錄下
4) 將cookie的有效期設置為0時, 表示刪除該cookie, 值得注意的是刪除cookie時的有效路徑應該與創建cookie時的有效路徑一致, 否則無法刪除
5. 設置cookie的有效路徑
cookie.setPath(String path);
1) cookie的默認有效路徑: 創建該cookie的servlet所在的servlet映射路徑. 比如在CookieDemo1創建了cookie1, 而且知道CookieDemo1的映射路徑是/day01/servlet/CookieDemo1 (/day01為Web工程根路徑) , 那么cookie1的有效路徑就是/day01/servlet/CookieDemo1
2) 刪除cookie時設置的有效路徑與創建cookie時設置的有效路徑一致, 才能刪除cookie
3) 將cookie的有效目錄設置成/day01時, 則訪問/day01目錄下所有資源都會攜帶cookie. 如果將cookie的有效目錄設置成/day01/resource/, 那么在訪問/day01/index.jsp時就不會攜帶cookie過去.
6. 設置cookie域
cookie.setDomain(string domain);
1) 什么是域?
sina.com.cn是域名
www.sina.com.cn是主機名, 表示sina.com.cn域下有一台www主機
同理也可以是ftp, mail主機, ftp.sina.com.cn, 就類似我們購買好域名之后可以在域上搭建多台主機
2) 舉個栗子
cookie.setDomain(".sina.com.cn"); // 以后去訪問sina.com.cn域時, 都會攜帶這個cookie過去, 注意sina.com.cn前有個點
7. support getter/setter for name and value
二. 實現顯示用戶上次訪問時間
程序主要分成兩個部分: 獲取上次訪問時間的cookie部分和返回最新訪問時間的cookie, 值得注意的是這兩部分使用的是同一個cookie
1 /** 2 * Created by IntelliJ IDEA. 3 * 4 * @Auther: ShaoHsiung 5 * @Date: 2018/8/28 08:22 6 * @Title: 獲取用戶上次訪問時間並返回最新的訪問時間 7 * @Description: 8 */ 9 public class CookieDemo1 extends HttpServlet { 10 @Override 11 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 13 // 設置瀏覽器編碼 14 response.setContentType("text/html; charset=utf-8"); 15 16 // 獲取輸出對象 17 Writer out = response.getWriter(); 18 out.write("上次訪問時間: "); 19 20 // 獲取訪問時間cookie 21 Cookie[] cookies = request.getCookies(); 22 for (int i = 0; cookies != null && i < cookies.length; i++) { 23 24 Cookie cookie = cookies[i]; 25 if (cookie.getName().equals("lastAccess")) { 26 String value = cookie.getValue(); 27 Date date = new Date(Long.parseLong(value)); 28 29 out.write(date.toLocaleString()); 30 } 31 } 32 33 // 設置最新的訪問時間cookie 34 Cookie cookie = new Cookie("lastAccess", System.currentTimeMillis() + ""); 35 // 設置cookie有效時間 單位:秒 36 cookie.setMaxAge(3600); 37 // 設置cookie有效路徑 38 cookie.setPath(request.getContextPath()); 39 //System.out.println(request.getContextPath()); 40 //System.out.println(this.getServletContext().getContextPath()); 41 response.addCookie(cookie); 42 } 43 44 @Override 45 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 46 doGet(req, resp); 47 } 48 }
三. cookie其它細節
1. 一個web站點可以給用戶發送多個cookie
2. 不同瀏覽器cookie的個數和大小不一致
3. 每個web站點最多給用戶發送20個cookie // 未測試