Java 之 cookie 記住用戶登錄時間案例


需求:

  1. 訪問一個Servlet,如果是第一次訪問,則提示:您好,歡迎您首次訪問。
  2. 如果不是第一次訪問,則提示:歡迎回來,您上次訪問時間為:顯示時間字符串

分析:

1. 可以采用Cookie來完成 2. 在服務器中的Servlet判斷是否有一個名為lastTime的cookie 2.1 有:不是第一次訪問 1. 響應數據:歡迎回來,您上次訪問時間為:2019年10月4日11:50:20
          2. 寫回Cookie:lastTime=2019年10月4日11:50:01
    2.2 沒有:是第一次訪問 1. 響應數據:您好,歡迎您首次訪問 2. 寫回Cookie:lastTime=2019年10月4日11:50:01

 

代碼實現:

  1 import javax.servlet.ServletException;
  2 import javax.servlet.annotation.WebServlet;
  3 import javax.servlet.http.Cookie;
  4 import javax.servlet.http.HttpServlet;
  5 import javax.servlet.http.HttpServletRequest;
  6 import javax.servlet.http.HttpServletResponse;
  7 import java.io.IOException;
  8 import java.net.URLDecoder;
  9 import java.net.URLEncoder;
 10 import java.text.SimpleDateFormat;
 11 import java.util.Date;
 12 
 13 /**
 14    記住用戶登錄時間案例
 15  */
 16 @WebServlet("/cookieservlet")
 17 public class cookieservlet extends HttpServlet {
 18     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 19         // 設置響應消息體的數據格式以及編碼
 20         response.setContentType("text/html;charset=utf-8");
 21 
 22         //1 獲取所有 cookie
 23         Cookie[] cookies = request.getCookies();
 24         boolean flag = false;  // 默認沒有 cookie 為 lastTime
 25         // 2.遍歷cookie 數組
 26         if (cookies != null && cookies.length > 0) {
 27             for (Cookie cookie : cookies) {
 28                 // 3 獲取所有的cookie 名稱
 29                 String name = cookie.getName();
 30                 // 4.判斷名稱是否是 lastTime
 31                 if("lastTime".equals(name)) {
 32                     // 有 cookie,不是第一次訪問
 33                     flag = true;
 34 
 35                     // 獲取 cookie 的 value
 36                     // 響應數據
 37                     // 獲取 cookie 的value,s時間
 38                     String value = cookie.getValue();
 39 
 40                     System.out.println("解碼前:"+value);
 41                     // URL 解碼
 42                     value = URLDecoder.decode(value, "utf-8");
 43                     System.out.println("解碼后:"+value);
 44 
 45 
 46                     //設置cookie 的 value
 47                     // 獲取當前時間的字符串,重新設置  cookie 值,重新發送cookie
 48 
 49                     Date date = new Date();
 50                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 51                     String str_date = sdf.format(date);
 52 
 53                     System.out.println("編碼前:"+str_date);
 54                     //URL 編碼
 55                     str_date = URLEncoder.encode(str_date, "utf-8");
 56                     System.out.println("編碼后:"+str_date);
 57 
 58                     cookie.setValue(str_date);
 59 
 60                     // 設置 cookie的存活時間
 61                     cookie.setMaxAge(60*60);
 62                     response.addCookie(cookie);
 63 
 64 
 65                     response.getWriter().write("<h1>歡迎回來,您上次訪問時間為:"+value+"</h1>");
 66 
 67                     break;
 68                 }
 69             }
 70         }
 71 
 72         if(cookies == null || cookies.length==0 || flag == false) {
 73             // 沒有,第一次訪問
 74 
 75             //設置cookie 的 value
 76             // 獲取當前時間的字符串,設置cookie值,發送cookie
 77 
 78             Date date = new Date();
 79             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
 80             String str_date = sdf.format(date);
 81             Cookie cookie = new Cookie("lastTime",str_date);
 82 
 83             // 解決時間里面有特殊字符,使用 URL 編碼
 84             System.out.println("編碼前:"+str_date);
 85             //URL 編碼
 86             str_date = URLEncoder.encode(str_date, "utf-8");
 87             System.out.println("編碼后:"+str_date);
 88 
 89             cookie.setValue(str_date);
 90 
 91             // 設置 cookie的存活時間
 92             cookie.setMaxAge(60*60);
 93             response.addCookie(cookie);
 94 
 95             response.getWriter().write("<h1>歡迎您首次訪問</h1>");
 96         }
 97     }
 98 
 99     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
100         this.doPost(request, response);
101     }
102 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM