案例需求:
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()上下两边,前边是输出之前的保存的时间,后边输出之后的时间