JavaWeb筆記006 cookie和session

Cookie

cookie是由服務器生成,通過response將cookie寫回瀏覽器(set-cookie),保留在瀏覽器上,
	下一次訪問,瀏覽器根據一定的規則攜帶不同的cookie(通過request的頭 cookie),我們服務器就可以接受cookie
	
cookie的api:
	new Cookie(String key,String value)
寫回瀏覽器:
	response.addCookie(Cookie c)
獲取cookie:
	Cookie[] request.getCookies()
cookie的常用方法:
	getName():獲取cookie的key(名稱)
	getValue:獲取指定cookie的值

cookie-總結:

常用方法:
	setMaxAge(int 秒):設置cookie在瀏覽器端存活時間  以秒爲單位
		若設置成 0:刪除該cookie(前提必須路徑一致)
	setPath(String path):設置cookie的路徑.
		當我們訪問的路徑中包含此cookie的path,則攜帶
		默認路徑: 
			訪問serlvet的路徑,從"/項目名稱"開始,到最後一個"/"結束
			例如:
				訪問的serlvet路徑:
					/day11/a/b/hello
				默認路徑爲:
					/day11/a/b
		手動設置路徑:以"/項目名"開始,以"/"結尾;
		
// 例如使用cookie記錄上次訪問時間		
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//0.設置編碼
	response.setContentType("text/html;charset=utf-8");
	PrintWriter w = response.getWriter();
	
	//1.獲取指定名稱的cookie
	Cookie c=getCookieByName("lastTime",request.getCookies());
	
	//2.判斷cookie是否爲空
	if(c == null){
		//cookie爲空 提示 第一次訪問
		w.print("您是第一次訪問!");
	}else{
		//cookie不爲空  獲取value 展示 上一次訪問的時間
		String value = c.getValue();// lastTime=12312324234
		long time = Long.parseLong(value);
		Date date = new Date(time);
		w.print("您上次訪問時間:"+date.toLocaleString());
	}
	
	//3.將當前訪問時間記錄
	//3.1創建cookie
	c=new Cookie("lastTime",new Date().getTime()+"");
	
	//持久化cookie
	c.setMaxAge(3600);
	//設置路徑
	c.setPath(request.getContextPath()+"/");//  /day11/
	
	//3.2寫回瀏覽器
	response.addCookie(c);
}

Session

session:
	服務器端會話技術.
	當我們第一次訪問的服務器的時候,服務器獲取id,
		能獲取id
			要拿着這個id去服務器中查找有無此session
				若查找到了:直接拿過來時候,將數據保存,需要將當前sessin的id返回給瀏覽器
				若查找不到:創建一個session,將你的數據保存到這個session中,將當前session的id返回給瀏覽器
		不能獲取id
			創建一個session,將你的數據保存到這個session中,將當前session的id返回給瀏覽器
	
	獲取一個session:
		HttpSession  request.getSession()
	
	域對象:
		xxxAttribute
		生命週期:
			創建:第一次調用request.getsession()創建
			銷燬:
				服務器非正常關閉
				session超時
					默認時間超時:30分鐘  web.xml有配置 
					手動設置超時:setMaxInactiveInterval(int 秒) 瞭解
				手動幹掉session
					★session.invalidate()
		存放的私有的數據.
		
		
	// 例如使用session記錄用戶添加的購物車,當然實際不會使用session這麼做,這只是個例子
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.設置編碼
		response.setContentType("text/html;charset=utf-8");
		PrintWriter w = response.getWriter();
		
		//1.獲取商品的名稱
		String name=request.getParameter("name");
		name=new String(name.getBytes("iso8859-1"),"utf-8");
		
		//2.將商品添加到購物車
		//2.1 從session中獲取購物車
		Map<String,Integer> map=(Map<String, Integer>) request.getSession().getAttribute("cart");
		
		Integer count=null;
		
		//2.2判斷購物車是否爲空
		if(map==null){
			//第一次購物  創建購物車 
			map=new HashMap<>();
			
			//將購物車放入session中g
			request.getSession().setAttribute("cart", map);
			
			count=1;
		}else{
			//購物車不爲空 繼續判斷購物車中是否有該商品
			count = map.get(name);
			if(count==null){
				//購物車中沒有該商品
				count=1;
			}else{
				//購物車中有該商品
				count++;
			}
		}
		//將商品放入購物車中
		map.put(name, count);
		
		//3.提示信息
		w.print("已經將<b>"+name+"</b>添加到購物車中<hr>");
		w.print("<a href='"+request.getContextPath()+"/product_list.jsp'>繼續購物</a>&nbsp;&nbsp;&nbsp;&nbsp;");
		w.print("<a href='"+request.getContextPath()+"/cart.jsp'>查看購物車</a>&nbsp;&nbsp;&nbsp;&nbsp;");
	}

關於cookie和session,還可以參考我的另一篇文章的講解https://blog.csdn.net/lizhengwei1989/article/details/75570954

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