Cookie實現記錄上一次的登陸時間以及刪除Cookie
阿新 • • 發佈:2019-02-05
下面我們實現了得到客戶端的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下共同使用。