cookie实现记录访问

注意:1.设置的时间字符串特殊字符如空格在添加到cookie前要进行URL编码,获取打印前要进行解码。

   2.req获取的cookie是客户端带过来的,respond回去的是更改后的,要把客户端带来的和相应回去的cookie区分开。

/**
 * cookie显示上次访问时间
 */
@WebServlet("/ServletCookie")
public class ServletCookie extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        boolean flag=false;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null&&cookies.length>0){

            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                if(name.equals("lastTime")){
                    flag=true;
                    //给客户端响应一个新的cookie
                    String encode = getString();
                    cookie.setValue(encode);
                    //相应时间的cookie给客户端
                    cookie.setMaxAge(60*60*24*30);
                    response.addCookie(cookie);
                    //这个是请求带来的cookie
                    //解码前
                    System.out.println(value);
                    String decode = URLDecoder.decode(value,"utf-8");
                    response.getWriter().write("<h1>上次的访问时间为"+decode+"</h1>");
                    //访问到其中一个退出
                    break;
                }
            }
        }

        if (cookies==null&&cookies.length==0&&flag==false){
            String encode = getString();
            Cookie cookie=new Cookie("lastTime",encode);
            response.getWriter().write("欢迎首次访问!");
            //相应时间的cookie给客户端
            cookie.setMaxAge(60*60*24*30);

            response.addCookie(cookie);
        }

    }

    private String getString() throws UnsupportedEncodingException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月-dd日 HH:mm:ss");
        String format = sdf.format(date);
        System.out.println("编码前"+format);
        String encode = URLEncoder.encode(format, "utf-8");
        System.out.println("编码后"+encode);
        return encode;
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}
原文地址:https://www.cnblogs.com/findlisa/p/10891890.html