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

  • 相关阅读:
    Redis的安装和部署
    SaltStack应用grains和jinja模板-第四篇
    SaltStack部署配置Tomcat-第三篇
    python魔法方法、构造函数、序列与映射、迭代器、生成器
    python异常
    python类
    python之函数、参数、作用域、递归
    docker+openvswitch实现主机与容器的网络通信
    Docker网络和容器的通信
    docker命名空间、控制组及联合文件系统概念
  • 原文地址:https://www.cnblogs.com/shaohsiung/p/9546047.html
Copyright © 2020-2023  润新知