cookie.setValue一些注意事项

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

 Cookie[] cookies = request.getCookies();
        response.setContentType("text/html;charset=utf-8");
        boolean flag = false;
        //解决等下加不加 cookies.length>0
        if (cookies != null) {
            flag = true;
            for (Cookie cookie : cookies) {
                String lastname = cookie.getName();
                if (lastname.equals("lastname")) {
                    //获取当前cookie的Value,就是上次访问的时间,不能写在 cookie.setValue(enc_date) 后
                    // 否则,设置过了,dataValue也变成设置过的时间
                    String dataValue = cookie.getValue();
                    String dec_date = URLDecoder.decode(dataValue, "utf-8");
                    response.getWriter().write("上一次访问时间是:" + dec_date);
                    //设置当前时间进去
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String date = simpleDateFormat.format(new Date());
                    String enc_date = URLEncoder.encode(date, "utf-8");
                    cookie.setValue(enc_date);
                    response.addCookie(cookie);
                    response.getWriter().write("===== 当前时间:" + date + "<br>");
                }
                break;
            }
        } else if (cookies == null || cookies.length == 0 || flag == false) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String date = simpleDateFormat.format(new Date());
            String enc_date = URLEncoder.encode(date, "utf-8");
            Cookie cookie = new Cookie("lastname", enc_date);
            cookie.setMaxAge(60 * 60 * 24 * 30);
            response.addCookie(cookie);
            response.getWriter().write("您是第一次访问" + date);
        }
cookie.setValue(enc_date);设置的时当前for循环获取的cookie,设置完后也是当前cookie,

如果改成这这样

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String date = simpleDateFormat.format(new Date());
                    String enc_date = URLEncoder.encode(date, "utf-8");
                    cookie.setValue(enc_date);
                    System.out.println("1"+cookie.getValue());
                    response.addCookie(cookie);
                    System.out.println("2"+cookie.getValue());
                    response.getWriter().write("===== 当前时间:" + date + "<br>");
                    //这三行放底下
                    String dataValue = cookie.getValue();
                    String dec_date = URLDecoder.decode(dataValue, "utf-8");
                    response.getWriter().write("上一次访问时间是:" + dec_date);

把前三行放底下,输出时间会变成一样,既date==dec_date,因为cookie.setValue()后,当前的cookie.value都是一样的,放上面,则是先输出上次所保存的value,然后在设置value成当前时间,下次页面在刷新,读取就是读取刚才保存的了。

总的来说,第二块代码是错的,如果要输出当前时间,和上次访问时间的话,要向第一个代码那样写,cookie.setValue()设置的是当前cookie,那块代码段里,那个cookie的value都是一样的,所以想要输出不同时间,要写在cookie.setValue()上下两边,前边是输出之前的保存的时间,后边输出之后的时间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值