cookie - 提示上一次访问该网页的时间

Posted fengzeng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie - 提示上一次访问该网页的时间相关的知识,希望对你有一定的参考价值。

      案例:记住上一次访问时间
        1. 需求:
            1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
            2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

        2. 分析:
            1. 可以采用Cookie来完成
            2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
                1. 有:不是第一次访问
                    1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
                    2. 写回Cookie:lastTime=2018年6月10日11:50:01
                2. 没有:是第一次访问
                    1. 响应数据:您好,欢迎您首次访问
                    2. 写回Cookie:lastTime=2018年6月10日11:50:00

 

注意点:

1. 获取PrintWriter流之前必须设置编码

 response.setContentType("text/html;charset=utf-8");

2. cookie中不能包含特殊字符,比如空格,所以要进行编码以及解码

 1 package cn.itcast.web.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.Cookie;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.io.IOException;
10 import java.net.URLDecoder;
11 import java.net.URLEncoder;
12 import java.text.SimpleDateFormat;
13 import java.util.Date;
14 
15 @WebServlet("/cookieServlet")
16 public class CookieServlet extends HttpServlet 
17     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException 
18         // 获取PrintWriter流之前设置响应的消息体的数据格式以及编码
19         response.setHeader("content-type", "text/html;charset=utf-8");
20 
21         // 1.获取所有Cookie
22         Cookie[] cookies = request.getCookies();
23         boolean flag = false;   // 没有叫做lastTime名称的cookie
24 
25         // 2.遍历cookie数组
26         if (cookies != null) 
27             for (Cookie cookie : cookies) 
28                 if (cookie.getName().equals("lastTime"))   // 不是第一次访问
29                     flag = true;
30 
31                     String value = cookie.getValue();
32                     value = URLDecoder.decode(value, "utf-8");  // URL解码
33                     response.getWriter().write("欢迎回来,您上次的访问时间是" + value);
34 
35                     // 将cookie的value值改为此次登录的时间,重新发送cookie
36                     Date date = new Date();
37                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
38                     String str_date = sdf.format(date);
39                     str_date = URLEncoder.encode(str_date, "utf-8");    // URL编码,因为str_date中包含空格,如果不进行URL编码将会报错
40                     cookie.setValue(str_date);
41                     cookie.setMaxAge(30 * 24 *60 *60); // 设置cookie的存活时间
42                     response.addCookie(cookie);
43                     break;
44                 
45             
46         
47 
48         if (cookies == null || flag == false)  // 第一次访问
49             response.getWriter().write("<h1>您好,欢迎您首次访问<h1>");
50 
51             Date date = new Date();
52             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
53             String str_date = sdf.format(date);
54             str_date = URLEncoder.encode(str_date, "utf-8");
55             Cookie cookie = new Cookie("lastTime", str_date);
56             cookie.setMaxAge(30 * 24 *60 *60);
57             response.addCookie(cookie);
58         
59 
60 
61     
62 
63     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
64         this.doPost(request, response);
65     
66 

 

以上是关于cookie - 提示上一次访问该网页的时间的主要内容,如果未能解决你的问题,请参考以下文章

jsp&cookie&session-01

Cookie的简单实例;

Cookie登录时间案例 January 27,2020

Cookie案例分析

如何在打开网页时自动刷新一次?只要一次!

记一次网络能ping通,但浏览器不能访问网页的遭遇