1. 程式人生 > >Cookie和Session之間的關係重新複習一下

Cookie和Session之間的關係重新複習一下

Cookie幹嘛的?
  會話(cookie,session)技術的一種.
  因為http協議是無狀態的,每次都是基於一個請求一個響應.每次請求和響應都跟上次沒有關係.
  我們需要記錄之前對話資訊.
  cookie技術.是屬於客戶端(瀏覽器)儲存資訊的技術.
  


cookie怎麼用?
	1.新增cookie到瀏覽器
				1>新建一個cookie(鍵值對)
				Cookie cookie = new Cookie("name", "tom");
				2>將cookie 新增到響應中
				response.addCookie(cookie);
	2.瀏覽器傳送cookie到伺服器,如何取
			1>獲得所有瀏覽器傳送的cookie
				Cookie[] cookies  = request.getCookies();
			2>遍歷並判斷我們要找的cookie
					if(cookies!=null && cookies.length>0){
						for(Cookie c : cookies){
								if(c.getName().equals("name")){
									System.out.println("獲得的cookie:"+c.getName()+":"+c.getValue());
								}
						}
					}
cookie原理.
	讓瀏覽器記住鍵值對.是向響應頭中新增一下頭即可:
		set-Cookie:name=tom;
	瀏覽器記住之後,向伺服器傳送鍵值對,是在請求頭中新增下面的資訊:
		Cookie: name=tom;


cookie細節問題:
	1.瀏覽器記多久?
		預設是在會話期間有效.(關閉瀏覽器,cookie就被刪除).(有效時間-1)
	2.有效時間如何設定?
		//設定cookie的最大有效時間
		1>設定一個正數,標示最大有效時間.單位是秒
		//cookie.setMaxAge(60*60);
		2>設定為-1 , 就是相當於預設有效時間, 瀏覽器關閉就消失.
		//cookie.setMaxAge(-1);
		3> 標示cookie的有效時間為0.傳送到瀏覽器就消失了.
				//利用有效時間為0 這件事,我們可以做刪除cookie的操作.
				// 因為同一個路徑 ,不能存在相同的cookie(鍵相同).
				// 我們可以通過覆蓋的方式,設定有效時間為0. 刪除cookie
		cookie.setMaxAge(0);
		
	3.瀏覽器在什麼情況下發送cookie(路徑)
			cookie的預設路徑就是傳送cookie的servlet所在目錄.
				/Day09-cookie 
				/Day09-cookie/abc/xxxServlet
			訪問路徑如果是cookie路徑的子路徑那麼,瀏覽器就會把該cookie告訴伺服器.
	4.cookie中的域 (瞭解)
		想要以下三個 主機和主機下的專案能共享一個cookie.
			www.baidu.com
			music.baidu.com
			map.baidu.com
		完成兩步即可:	
			1.設定cookie的域為 ".baidu.com"
			2.設定cookie路徑 為: "/" 
		以上就是跨主機訪問cookie.不常用.

Session

1什麼是session
 伺服器端儲存會話資訊的技術.
	

2.怎麼用
			//1 如何獲得session
			HttpSession session = request.getSession();
			//2 如何操作session
		//			session.setAttribute(arg0, arg1)
		//			session.getAttribute(arg0)
		//			session.removeAttribute(arg0)
		//			session.getAttributeNames()
	
3.原理
	瀏覽器第一次訪問伺服器,伺服器會在記憶體中開闢一個空間(session),並把session對應的ID傳送給瀏覽器.
	那麼下次瀏覽器再去訪問伺服器,會把sessionID 交給伺服器,伺服器通過sessionID 找到剛才開闢的空間.
	以上就是session的原理.
4.session細節問題
	1> 伺服器讓瀏覽器記住sessionID的cookie 預設過期時間是 (-1)==> 關閉瀏覽器 cookie就丟失 ==>  cookie丟失 sessionID就丟失 ==> 找不到伺服器的session 
	2> session中除了 4個操作 map的方法之外,還有哪些方法.
		long getCreationTime()   獲得建立時間
		String getId()    獲得sessionID
		long getLastAccessedTime()   獲得最後一次訪問時間
		int  getMaxInactiveInterval()  獲得session的壽命
		void setMaxInactiveInterval(int interval)   設定session的過期時間 
		void invalidate()   讓session立即失效
		boolean isNew()  
	3> 關於設定session的最大有效時間
		預設是30分鐘. ==> 在tomcat的web.xml中 <session-config> 配置的.
		如何修改session的過期時間?
			1.修改在tomcat的web.xml中 <session-config> ==> 影響伺服器中的所有專案
			2.在專案的web.xml中 加入<session-config> 配置.==> 影響的是當前專案
			3.通過setMaxInactiveInterval(int interval)方法設定.==> 當前操作的session
			
	4>(瞭解內容)URL重寫
		如果瀏覽器 禁用cookie功能不能儲存任何cookie.那麼session技術要是用 cookie來儲存sessionID. 沒有cookie怎麼儲存?
			使用url重寫解決該問題.
			將頁面中所有的連線 末尾全都加上 cookieid的引數. 這樣使用者點選連線訪問網站,通過url把SeesionID帶到了伺服器.這樣就解決了.
			但是 網際網路行業沒有這麼幹的.