使用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  // 未测试

原文地址:https://www.cnblogs.com/shaohsiung/p/9546047.html