下面我们实现了得到客户端的Cookie,然后判断是否是最后一次登陆时间的Cookie。
如果是的话我们就转成时间格式输出。
我们是先获取的Cookie而后添加Cookie,因为第一次登陆的时间我们没有上一次的登陆时间。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//得到客户端的所有的Cookie
Cookie[] cookies=request.getCookies();
//从Cookie中找出存储最后登录时间的Cookie
//Cookie是一个键值对,并且键和值都是String的
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
String name = cookies[i].getName();//得到Cookie的name
if("lastAccessTime".equals(name))
{
String time = cookies[i].getValue();//得到最后登录时间,时间是字符串类型的
long t = Long.parseLong(time);
out.println("上次登录时间为:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(t)));
}
}
}
out.println("<a href='"+request.getContextPath()+"/servlet/delcookie'>删除Cookie</a>");
//把这次的登录时间以Cookie的形式发送给客户端
//创建Cookie
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
cookie.setMaxAge(60*15);//Cookie 被存储到磁盘了
cookie.setPath(request.getContextPath());// /day35_cookie 只要是路径以 /day35_cookie开头的都可以接收到Cookie
//cookie.setPath("/");// /day35_cookie
//把cookie发送给客户端
response.addCookie(cookie);
/*
* Cookie默认存储在浏览器的内存,浏览器一旦关闭,Cookie全都没了
* setMaxAge(time)设置Cookie的最大存活时间,默认单位是秒
* setMaxAge(-1);默认是-1,浏览器一旦关闭,Cookie全都没了
* setMaxAge(0):浏览器不关闭,Cookie也没了
* setMaxAge(正数)
*
* 满足什么条件客户端会把Cookie发给服务器端?
* 被访问资源的路径前边要匹配
* http://localhost:8080/day35_cookie/servlet/cookie1
* http://localhost:8080/day35_cookie/servlet/cookie2
*/
}
上面我们还介绍了Cookie的setMaxAge()方法,这个是设置Cookie的存活时间的。
当然我们也可以手动的删除Cookie,上面我们提供了方法,
上面我们的跳转到删除Cookie界面,删除Cookie。
那么我们是怎样删除Cookie的呢,我们再来看一下删除Cookie的servlet。
response.setContentType("text/html;charset=utf-8");
//删除Cookie
Cookie cook = new Cookie("lastAccessTime", "");
cook.setMaxAge(0);
//设置path,否则可能会错删
cook.setPath(request.getContextPath());
response.addCookie(cook);
我们先新建了一个Cookie跟需要删除的Cookie重名,把其覆盖掉,然后设置存活时间为0。
需要注意的是我们需要设置新Cookie的路径,否则可能存在在其他路径下重名的Cookie导致无法删除。
对于路径问题,我们可以自己设置cookie的路径,相同路径下的cookie可以在不同的servlet下共同使用。