Cookie(二)

寫入客戶端的Cookie一般有兩種,一種是不設置生存週期的Cookie,一種是設置了生存週期的Cookie。前者隨着當前打開的瀏覽器窗口的存活而存活,當瀏覽器窗口關閉之後,Cookie隨之消失。另一種Cookie在被設置生存週期後寫入到了本地的磁盤文件中,存活時間由設定的時間決定,即使關閉窗口Cookie也不會消失。

以下兩段代碼來做實驗。

SetCookie.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SetCookie extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		for(int i=0;i<3;++i){
			Cookie cookie = new Cookie("key"+i,"value"+i);//沒有設置生存週期的Cookie,關閉瀏覽器窗口後消失
			resp.addCookie(cookie);
			cookie = new Cookie("mypersistentk"+i,"mypersistentv"+i);
			cookie.setMaxAge(3600);//設置生存時間爲一個小時,被寫入到了磁盤文件中保存起來
			resp.addCookie(cookie);
		}
		PrintWriter pw = resp.getWriter();
		pw.print("<a href='http://localhost:8080:test/servlet/ShowCookie'>go</a>");
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req,resp);
	}
	
}

ShowCookie.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowCookie extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter pw = resp.getWriter();
		Cookie[] cookies = req.getCookies();//打印出之前設置的Cookie
		for(int i=0;i<cookies.length;++i){
			Cookie cookie = cookies[i];
			pw.println(cookie.getName()+":"+cookie.getValue());
			pw.println();
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
	
}



運行SetCookie再運行ShowCookie後會打印出6條Coookie,包括沒有生存週期的和有生存週期的。當關閉當前窗口,重新打開一個窗口再運行ShowCookie時只會出現三條Cookie記錄,也就是之前設置生存週期被存入磁盤文件的那三條,而沒有設置生存週期的另外三條Cookie隨着瀏覽器窗口的關閉而死亡。

注意:在當前窗口打開的子窗口,即。按下Ctrl+n鍵時出現的窗口能夠獲得其父窗口的Cookie,包括沒有設置生存週期的Cookie

補充:servlet/jsp設置的Cookie只能被當前路徑以及其子路徑下的sevlet/jsp讀取到(這裏的路徑指的是url地址,即web.xml裏配置的url-pattern)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章