zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    Azure 3月新公布(二)
    亲,「广撒网」的营销方式你还没厌倦吗?
    Azure进阶攻略 | 下载还是在浏览器直接打开,MIME说了算!
    5步玩转Power BI Embedded,老司机全程带路解析
    手握不同媒体的数据,接下来该干些什么?
    cmake教程
    翻译Lanlet2
    pugixml 1.9 manual解读(部分)
    U盘无法拔出的解决办法
    Function Pointers in C
  • 原文地址:https://www.cnblogs.com/findlisa/p/10891890.html
Copyright © 2011-2022 走看看