Cookie

cookie是完成會話跟蹤的一種機制,另外還有Session,是在客戶端保存用戶信息。java

是在瀏覽器訪問Web服務器的某個資源時由Web服務器在Http相應消息頭中附帶傳送給瀏覽器的小文本文件。web

底層實現原理:瀏覽器

web服務器經過在HTTP響應消息中增長Set-Cookie響應頭字段將Cookie信息發送給瀏覽器,瀏覽器經過在HTTP請求消息中增長Cookie請求頭字段將Cookie回傳給WEB服務器。服務器

會話Cookie和持久化Cookie:cookie

默認狀況下Cookie是一個會話級別的Cookie,若是不設置過時時間,關閉瀏覽器Cookie就刪除了,通常保存在內存而不是硬盤裏。jsp

Cookie做用範圍:code

能夠做用於當前目錄和當前目錄的子目錄,但不能做用於當前目錄的上一級目錄;orm

能夠經過cookie.setPath()來設置cookie的做用範圍。其中「/」表明站點的根目錄。ip

實例:內存

writerCookie.jsp
	<%
		Cookie cookie = new Cookie("cookiepath","cookieValue");
		cookie.setPath(request.getContextPath());
		response.addCookie(cookie);
	%>
	<a href = "../cookie1.jsp">To read Cookie</a><br>
	
	<%= request.getContextPath() %><br><br>
	<%= request.getServletPath() %>

cookie1.jsp
<body>

<%
	String cookieVal = null;
	Cookie[] cookies = request.getCookies();
	if(cookies != null && cookies.length > 0){
		for(Cookie cookie : cookies){
			if(cookie.getName().equals("cookiepath")){
				cookieVal = cookie.getValue();
			}
		}
		if(cookieVal != null){	
			out.print(cookieVal);			
		}else{
			out.print("沒有指定的Cookie.");
		}
	}
	
%>
</body>

自動登陸實例:

login.jsp
<body>

	<form action="index.jsp">
		name:<input type="text" name="name">
		<input type="submit" value="submit">
	</form>
</body>

index.jsp
<body>
	<%
		String name = request.getParameter("name");
		if(name != null && !name.equals("")){
			Cookie cookie = new Cookie("name",name);
			cookie.setMaxAge(10);
			response.addCookie(cookie);
		}else{
			Cookie[] cookies = request.getCookies();
			if(cookies != null && cookies.length > 0){
				for(Cookie cookie : cookies){
					if("name".equals(cookie.getName())){
						name = cookie.getValue();
					}
				}
			}
		}
		
		if(name != null && !name.trim().equals("")){
			out.print("hello:" + name);
		}else{
			response.sendRedirect("login.jsp");
		}
	%>
</body>

顯示瀏覽商品厲害實例:

book.jsp
<body>
	<h4>Book Detail Page</h4>
	Book:<%= request.getParameter("book")%><br>
	<a href ="books.jsp">Return</a>
	
	<%
		String book = request.getParameter("book");
		Cookie[] cookies = request.getCookies();
		List<Cookie> bookCookies = new ArrayList<Cookie>();
		//用來保存和book.jsp傳入的book匹配的那個cookie
		Cookie tempCookie = null;
		if(cookies != null&& cookies.length >= 0){
			for(Cookie c : cookies){
				String cookieName = c.getName();
				if(cookieName.startsWith("ATGUIGU_BOOK_")){
					bookCookies.add(c);
					if(c.getValue().equals(book)){
						tempCookie = c;
					}
				}
			}
		}
		if(bookCookies.size() >= 5 && tempCookie == null){
			tempCookie = bookCookies.get(0);
		}
		
		if(tempCookie != null){
			tempCookie.setMaxAge(0);
			response.addCookie(tempCookie);
		}
		Cookie cookie = new Cookie("ATGUIGU_BOOK_" + book,book);
		response.addCookie(cookie);
		
	
	%>
</body>

books.jsp
<body>

	<h4>Books Page</h4>
	<a href="book.jsp?book=JavaWeb">JavaWeb</a>
	<br>
	<a href="book.jsp?book=Java">Java</a>
	<br>
	<a href="book.jsp?book=Oracle">Oracle</a>
	<br>
	<a href="book.jsp?book=Ajax">Ajax</a>
	<br>
	<a href="book.jsp?book=JavaScript">JavaScript</a>
	<br>
	<a href="book.jsp?book=Android">Android</a>
	<br>
	<a href="book.jsp?book=Jbpm">Jbpm</a>
	<br>
	<a href="book.jsp?book=Struts">Struts</a>
	<br>
	<a href="book.jsp?book=Hibernite">Hibernite</a>
	<br>
	<a href="book.jsp?book=Spring">Spring</a>
	<br>
	<br>
	<%
		Cookie[] cookies = request.getCookies();
		if (cookies != null && cookies.length >= 0) {
			for (Cookie c : cookies) {
				String cookieName = c.getName();
				if (cookieName.startsWith("ATGUIGU_BOOK_")) {
					out.print(c.getValue());
					out.print("<br>");
				}
			}
		}
	%>
</body>
相關文章
相關標籤/搜索