使用Cookie實現顯示用戶上次訪問時間

一. 經常使用Cookie API介紹

1. 獲取cookiehtml

request.getCookies();  // 返回Cookie[]web

2. 建立cookie瀏覽器

Cookie(String key, String value);  // 經過構造器建立緩存

3. 返回cookie給用戶瀏覽器cookie

response.addCookie(Cookie cookie);dom

4. 設置cookie的有效期jsp

cookie.setMaxAge(int sec);ide

1) 單位: 秒測試

2) 默認cookie有效期爲一個會話, 存儲在瀏覽器緩存中, 即關閉瀏覽器cookie被刪除this

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  // 未測試

相關文章
相關標籤/搜索