Cookie之记录用户上次访问时间

Cookie之记录用户访问时间

需求:

需求:

  1:用户访问服务器(Servlet),判断用户是否是第一次访问,如果是第一次访问,则在页面响应内容为:“您好,欢迎您首次访问”;
  2:用户访问服务器(Servlet),判断用户是否是第一次访问,如果不是第一次访问,则在页面响应内容为:“欢迎回来,您上次访问的时间为:xxxx年xx月xx日 , xx时xx分xx秒”;

 

需求分析:  

  该需求可以使用Cookie来完成,服务器(Servlet)先获取请求体头中的Cookie信息,如果该信息中不存在我们需要的信息,则该用户为首次访问.我们需要将当前时间存入Cookie,然后将Cookie信息回写到客户端(浏览器端),进行存储;如果该信息中存在我们需要的信息,则该用户不是首次访问.我们需要将当前时间存入Cookie,然后将Cookie信息回写到客户端(浏览器端),进行存储,并且在页面响应"欢迎回来,您上次访问的时间为:xxxx年xx月xx日 , xx时xx分xx秒"内容;

 

  • 在服务器端(Servlet)进行判断:获取到的Cookie中是否有一个name为指定名字的Cookie;

 

  1.     有指定Cookie:代表不是首次访问
    •       响应数据:欢迎回来,您上次访问的时间为:xxxx年xx月xx日 , xx时xx分xx秒;
    •       回写Cookie;

  2.    没有指定Cookie:代表是首次访问

    •       响应数据:您好,欢迎您首次访问;
    •       回写Cookie;


  代码实现:

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;


@WebServlet("/demo01")
public class Demo01 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应体格式参数
        response.setContentType("text/html;charset=utf-8");
        //获取所有的Cookie
        Cookie[] cookies = request.getCookies();
        //定义一个标记 用来表示是否存在指定name的Cookie,存在指定cookie,flag为false;不存在为true
        boolean flag = true;

        //如果有Cookie
        if (cookies != null && cookies.length != 0){
            //遍历cookie数组
            for (Cookie cookie : cookies) {
                //判断cookie数组中是否存在指定name的Cookie
                if ("LastTime".equals(cookie.getName())){//如果有指定name的cookie,说明用户非首次访问
                    //更改标记flag的状态值
                    flag = false;
                    //获取指定name cookie对应的值
                    String value = cookie.getValue();
                    //对获取到的值进行解码
                    String timeDecode = URLDecoder.decode(value, "utf-8");
                    //响应页面
                    response.getWriter().write("<h1>欢迎回来,您上次访问的时间是:" + timeDecode + "</h1>");

                    //获取当前时间
                    Date date = new Date();
                    //获取格式化日期对象
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 , HH时mm分ss秒");
                    //格式化当前时间
                    String time = simpleDateFormat.format(date);
                    //对时间字符串进行编码
                    String timeNow = URLEncoder.encode(time, "utf-8");
                    //设置Cookie存活时间
                    cookie.setMaxAge(45);
                    //更改cookie的值
                    cookie.setValue(timeNow);
                    //回写Cookie
                    response.addCookie(cookie);
                    //结束循环
                    break;
                }
            }
        }


        //没有Cookie或者Cookie中没有指定name的Cookie,说明用户时首次访问
        if (cookies == null || cookies.length == 0 || flag){
            //获取当前时间
            Date date = new Date();
            //获取格式化日期对象
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 , HH时mm分ss秒");
            //格式化当前时间
            String time = simpleDateFormat.format(date);
            //对时间字符串进行编码
            String timeEncode = URLEncoder.encode(time, "utf-8");
            //将编码后的时间字符串存入Cookie
            Cookie cookie = new Cookie("LastTime", timeEncode);
            //设置Cookie存活时间
            cookie.setMaxAge(45);
            //回写Cookie
            response.addCookie(cookie);
            //响应页面
            response.getWriter().write("<h1>您好,欢迎您首次访问</h1>");

        }

    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

 

实现效果:

  • 首次访问效果:

 

  • 不是第一次访问的效果:

 

posted @ 2019-06-16 21:39  optimistic&cheerful  阅读(1182)  评论(0编辑  收藏  举报