Cookie應用:顯示上次訪問頁面時間
阿新 • • 發佈:2019-01-27
Q題目
要求:
顯示上次訪問頁面時間,並新增清除Cookie功能
如下圖:
清除Cookie
A 程式碼
實現Cookie顯示上次訪問時間
package com.tcb.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*說明:
*1.該方式將時間直接以long型別存進Cookie
*2.從Cookie中取出值後,需要先做日期格式化,才能展示
*
*優點:避免某些電腦瀏覽器因為Cookie值儲存長短限制不能顯示上次訪問時間
*
*比如:“2017-05-04 20:33:22”,日期轉為該格式後,不能存進Cookie中,因為Cookie長度限制
* 但直接以--時間戳(long型別)--的方式,可以直接存進Cookie
*/
public class CookieServlet01 extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieServlet01() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//編碼格式
response.setContentType("text/html;charset=utf-8" );
PrintWriter writer=response.getWriter();
writer.write("上次訪問時間:");
Cookie[] cookies=request.getCookies();
if(cookies!=null){
//遍歷cookies,取出lastAccessTime這個cookie
for (int i = 0; i < cookies.length; i++) {
Cookie c=cookies[i];
if("lastAccessTime".equals(c.getName())){
//取值上次訪問時間,並顯示出來
String time=c.getValue();
time=new Date(Long.parseLong(time)).toLocaleString();
writer.write(String.valueOf(time));
}
}
}
writer.write("<a href="+request.getContextPath()+"/ClearCookieServlet>清除Cookie</a>");
//獲取當前時間,並存儲到Cookie中
Long currentTime=System.currentTimeMillis();
Cookie cookie=new Cookie("lastAccessTime", currentTime.toString());
cookie.setMaxAge(5*60);//設定Cookie有效時間,5min內關閉再開啟瀏覽器Cookie會一直存在
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
清除Cookie
package com.tcb.cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 說明:
* 清楚Cookie
*/
public class ClearCookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ClearCookieServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//清除cookie
//清除cookie時,完全沒必要先將cookie遍歷出來,再去清除cookie,儘管下面的方法可以實現清除cookie
//我們可以根據cookie的特性,名字相同的cookie,後面設定的值會覆蓋前面的值
/*Cookie[] cookies=request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
if("lastAccessTime".equals(cookie.getName())){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}*/
//便捷做法
Cookie cookie=new Cookie("lastAccessTime", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}