java自學之路-----Servlet_Cookie,Session

cookie:客戶端技術,程序把每個用戶的數據以cookie形式寫給各自的瀏覽器,當瀏覽器再次訪問web資源時,就會帶着這些數據

session:服務端技術,服務器在運行時爲每個瀏覽器創建一個獨享的session對象,由於該session對象是用戶瀏覽器獨享,用戶就可以帶着存在對象中的數據訪問web資源


cookie{

細節:

1.一個Cookie只能標識一種信息,他至少含有包含該信息的名字name和值value

2.一個Web站點可以給瀏覽器發送多個cookie,一個瀏覽器也可以存儲多個web站點發送的cookie

3.瀏覽器一般只允許存放300個cookie,每個web站點最多存放20個cookie到一個瀏覽器,每個cookie限制爲4kb

4.如果創建了一個cookie,並將它發送給瀏覽器,默認情況下他是一個會話級別的cookie,即存儲在瀏覽器內存中,用戶退出瀏覽器之後就會被刪除。如果希望將瀏覽器將cookie存儲到硬盤上,就需要設置maxAge,並給出一個以秒爲單位的時間

5.同名的cookie會被後一個覆蓋(先將第一個刪除,在存入第二個)

基本使用:(顯示上次訪問時間)


//		預防中文亂碼問題
		response.setCharacterEncoding("UTF-8");
		response.setHeader("content-type", "text/html;charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		out.print("上次訪問的時間爲:");
//		獲得cookie,遍歷,進行安全性判斷
		Cookie cookies[] = request.getCookies();
		for(int i=0; cookies!=null&&i<cookies.length; i++){
//			通過名字來判斷是否爲需要的cookie數據
			if(cookies[i].getName().equals("lastAccessTime")){
//				獲得存儲的時間,把字符串解析成long型的數值
				long time = Long.parseLong(cookies[i].getValue());
//				封裝爲時間格式
				Date date = new Date(time);
				out.print(date.toString());
			}
		}
//		將此時的時間寫入cookie
		Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
		cookie.setMaxAge(1*30*24*3600);//設置cookie 的有效時間,秒爲單位
		cookie.setPath("/web");//設置這個cookie的有效路徑, 
		
//		將cookie存到瀏覽器
		response.addCookie(cookie);
}

session{

該對象由服務器自動創建,開發人員通過request的方法獲得session對象,再進行操作

注意:

1.服務器在瀏覽器第一次獲取session的時候自動創建session,並保存在服務器中

2.當瀏覽器被關閉的時候,session不會被摧毀。默認三十分鐘後自動摧毀未使用session

3.如果只需要得到session對象,而不需要使用session,就使用request.getSession(false);

4.ie8多個瀏覽器客戶端共享同一個session對象

//		通過第一次request創建獲取session。request.getSession(false);指定是否需要創建session
		HttpSession session = request.getSession();
//		給session存值。
		session.setAttribute("name", "123");
		
//		摧毀session,或者通過修改web.xml文件
		session.invalidate();

實現原理:

1.當服務器爲一個瀏覽器創建一個session之後,會將Jsessionid存到cookie內併發送給瀏覽器

2.當該瀏覽器再次訪問服務器就會使用Jsessionid來獲得服務器對應的session對象

3.存儲Jsessionid的cookie對象是沒有有效期限的,瀏覽器一被關閉就會摧毀cookie

//			保證同一瀏覽器多次訪問同一個session對象
//		1.獲取session對象,爲其存值
		HttpSession session = request.getSession();
		session.setAttribute("pass", "halm");
//		2.獲得該session的id號
		String sessionid = session.getId();
//		3.將該id號存儲到新創建的cookie對象,並覆蓋之前默認的cookie對象
		Cookie cookie = new Cookie("JSESSIONID", sessionid);
		cookie.setPath("/web");
		cookie.setMaxAge(30*60);
//		4.將cookie存儲到硬盤中
		response.addCookie(cookie);
		request.getSession();//需要先獲得對象,才能對地址重寫
		//如果瀏覽器禁用cookie就會重寫,爲url附加上sessionid,如果瀏覽器帶着(未禁用)cookie就不會重寫,localhost不恩能重寫
		String url = response.encodeURL("/web_review/index.jsp");

}


域對象:

request:顯示完數據就不要再次使用數據

session:程序產生數據,除了顯示之外還需要使用到數據

servletContext:不僅在此程序中使用,別的程序還要使用該數據(一個web應用一個該對象)


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