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>