1. 程式人生 > >javaweb之Cookie顯示上次登入時間和清除Cookie、Cookie的細節

javaweb之Cookie顯示上次登入時間和清除Cookie、Cookie的細節

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必須一致,否則不會刪除