1. 程式人生 > >JavaWeb基礎(6):Cookie & Session

JavaWeb基礎(6):Cookie & Session

(一)會話

(1)資料儲存

  • HTTP協議是一種無狀態協議
    • 使用者在上次訪問過程中產生的資料可以通過會話技術儲存
  • 會話技術分為兩種
    • Cookie
    • Session

(二)Cookie

(1)定義

  • Cookie是指網站為了辨別使用者身份而儲存在本地終端(Client)上的資料

    • Cookie是瀏覽器端會話技術
    • Cookie的定義:Cookie儲存在客戶端
    • Cookie的工作流程:瀏覽網頁時,伺服器把Cookie傳送到使用者端,下次訪問相同網站時,伺服器就能通過Cookie判斷是否是以前的使用者訪問
  • 構造方法

	Cookie cookie = new Cookie(String name,
String value); //建立一個新的Cookie:名稱-對應值,儲存的都是String型別

(2)用法

  • 使用Cookie,可以將使用者訪問伺服器的時間儲存到Cookie
    • 記錄使用者的上次訪問時間
    • 儲存使用者的瀏覽記錄
	setMaxAge(int n) 設定Cookie在瀏覽器中的存活時間(單位為s)

(3)歷史記錄

  • 使用Cookie儲存瀏覽器訪問的記錄
    • 每次訪問頁面時將記錄新增到字串中,生成新的Cookie
    • 使用jsp頁面獲取Cookie,提取之後展示在主頁
  • 清空歷史記錄
    • 建立一個clearHistory的Servlet
    • 建立一個同名的Cookie(路徑以及key和儲存歷史記錄的Cookie相同)
    • response.addCookie(新Cookie) 用來覆蓋原有的Cookie

(三)Session

  • Sesssion(會話)是一種持久化網路協議
    • Session是伺服器端會話技術
    • Session物件由伺服器建立

(1)生命週期

	request.getSession() //獲取一個Session(HttpSession)物件
  • 建立:呼叫request.getSession()方法
  • 銷燬
    • session超時:預設時間為30min(在tomcat的web.xml中可檢視)
    • 手動銷燬:session.invalidate()

(2)購物車功能

		Map<String,
Integer>
map = (Map<String,Integer>) request.getSession().getAttribute("cart"); Integer count = 1; if(map == null){ //購物車為空,建立一個新的購物車 map = new HashMap<String,Integer>(); request.getSession().setAttribute("cart",map); //首次建立Session物件中的cart Attribute } else{ count = map.get(name); if(count == null){ count = 1; } else { count++; } } map.put(name,count);
  • 清空購物車
    • invalidate方法
public class ClearCart extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.設定編碼
		response.setContentType("text/html;charset=UTF-8");
		//1.清空session
		request.getSession().invalidate();
		//2.重定向
		response.sendRedirect(request.getContextPath()+"/cart.jsp");
	}
}