javaweb之Cookie顯示上次登入時間和清除Cookie、Cookie的細節
阿新 • • 發佈:2019-01-25
import java.io.IOException; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; 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; //代表網站首頁 //Cookie技術顯示使用者上次訪問網站的時間 public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print("<a href='/day07/servlet/CookieDemo2'>清除上次訪問時間</a><br>"); out.print("您上次訪問的時間是:"); // 拿到請求頭中所有的cookie Cookie cookies[] = request.getCookies(); // 遍歷cookies找到lastAccessTime這個cookie for (int i = 0; cookies != null && i < cookies.length; i++) { if (cookies[i].getName().equals("lastAccessTime")) { // 得到最後訪問時間的毫秒數 long cookieValue = Long.parseLong(cookies[i].getValue()); // 將最後訪問時間變成一個日期型別 Date date = new Date(cookieValue); // 格式化這個日期 DateFormat df = new SimpleDateFormat("yyyy-MM-WW kk:mm:ss"); String lastAccessTime = df.format(date); out.print(lastAccessTime); } } // 將最新的訪問時間設定回去 Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis() + ""); // 設定有效期為一個月 cookie.setMaxAge(1 * 3600 * 24 * 30); // 設定有效訪問路徑為/day07這個專案下的所有資源 cookie.setPath("/day07"); // 在response中增加一個cookie,伺服器會自動增加Set-Cookie頭欄位 response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
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 CookieDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { test1(response); test2(request, response); } // 自己實驗的方法,拿到了原有的cookie想要刪除還是要先設定下Path,否則Path還是會在這個servlet的目錄下 // 拿到了原有的cookie,如果只修改setMaxAge為0還是不行的! private void test2(HttpServletRequest request, HttpServletResponse response) { // 拿到請求頭中所有的cookie Cookie cookies[] = request.getCookies(); // 遍歷cookies找到lastAccessTime這個cookie for (int i = 0; cookies != null && i < cookies.length; i++) { if (cookies[i].getName().equals("lastAccessTime")) { Cookie cookie = cookies[i]; cookie.setMaxAge(0); cookie.setPath("/day07"); response.addCookie(cookie); } } } // 開發中的方法 private void test1(HttpServletResponse response) { Cookie cookie = new Cookie("lastAccessTime", ""); // 設定為0表示讓瀏覽器刪除這個cookie cookie.setMaxAge(0); // 刪除cookie的時候Path必須一致,因為同一個cookie,Path肯定一致 cookie.setPath("/day07"); response.addCookie(cookie); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
1. 一個Cookie只能標識一種資訊,它至少含有一個標識該資訊的名稱(NAME)和設定值(VALUE)
2. 一個web站點可以給一個web路覽器傳送多個Cookie,一個web瀏覽器也可以儲存多個web站點提供的Cookie
3. 瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB
4. 如果建立了一個cookie,並將它傳送到了瀏覽器,預設情況下它時一個會話級別的cookie(即儲存在瀏覽器的記憶體中),使用者推出瀏覽器之後即被刪除。若希望瀏覽器將該cookie儲存在磁碟上,則需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie
5. 注意,刪除cookie時,path必須一致,否則不會刪除