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


一. 常用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  // 未測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM