zhuanzi __
http://www.java3z.com/cwbwebhome/article/article8/8113.html
1、Cookie的來曆與作用
Cookie是WEB伺服器通過瀏覽器儲存在WWW使用者端硬碟上的一個文字檔,這個文字檔中包含了文本資訊。
文本資訊的內容以“名/值”對(key/value)的形式進行儲存。
可以讓WEB開發人員通過程式讀寫這個文字檔。
XP中儲存Cookie的目錄是“C://Documents and Settings\使用者名稱\Cookies”
Cookie的作用
解決瀏覽器使用者與Web伺服器之間無狀態通訊。
2Cookie編程
//建立對象
Date date = new Date() ;
Cookie c = new Cookie("lastVisited",date.toString()) ;
//設定有效時間
以s為單位
c.setMaxAge(60) ;
//設定Cookie路徑和網域名稱
c.setPath("/") ;
c.setDomain(".zl.org") ;
//網域名稱要以“.”開頭
//發送Cookie檔案
response.addCookie(c) ;
//讀取Cookie
Cookie cookies[] = request.getCookies() ;
Cookie c1 = null ;
if(cookies !=
null){
for(int i=0;i<cookies.length;i++){
c1 = cookies[i] ;
out.println("cookie name : " + c1.getName() +
" ") ;
out.println("cookie value :" + c1.getValue() +
"<br>");
}
}
//修改Cookie
Cookie cookies[] = request.getCookies() ;
Cookie
c = null ;
for(int i=0;i<cookies.length;i++){
c = cookies[i] ;
if(c.getName().equals("lastVisited")){
c.setValue("2010-04-3-28") ;
c.setMaxAge(60*60*12) ;
response.addCookie(c) ; //修改後,要更新到瀏覽器中
}
}
//刪除Cookie,(將Cookie的有效時間設為0)
Cookie cookies[] = request.getCookies() ;
Cookie c = null ;
for(int i=0;i<cookies.length;i++){
c = cookies[i] ;
if(c.getName().equals("lastVisited")){
c.setMaxAge(0);
response.addCookie(c) ;
}
}
4、使用Cookie的注意事項
·Cookie的大小和數量是有限制的。
·Cookie在個人硬碟上所儲存的文本資訊是以明文格式進行儲存的,沒有任何的加密措施。
·瀏覽器使用者可以設定不使用Cookie。
5、執行個體:Servlet中的Cookie編程
cookieInput.html頁面
SetCookie.java
GetCookie.java
cookieInput.html頁面中的參數提交到SetCookie.java中,由SetCookie.java儲存在瀏覽器的Cookie中,在SerCookie.java中連結到GetCookie.java從而讀取剛剛儲存的Cookie。
SetCookie.java :
publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username") ; //儲存Cookie if(username !=""){ Cookie c1 = new Cookie("username",username) ; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ; Cookie c2 = new Cookie("lastVisited",sdf.format(new java.util.Date())) ; c1.setMaxAge(60*60*60*12*30) ; c2.setMaxAge(60*60*60*12*30) ; response.addCookie(c1) ; response.addCookie(c2) ; out.println("Cookie儲存成功!"); out.println("<br><br>") ; out.println("<a href=GetCookie02>讀取Cookie</a>") ; }else{ response.sendRedirect("../cookieInput.html") ; } out.flush(); out.close(); } |
GetCookie.java:
publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); //讀取Cookie Cookie cookies[] = request.getCookies() ; Cookie c = null ; if(cookies != null){ for(int i=0;i<cookies.length;i++){ c = cookies[i] ; if(c.getName().equals("username")){ out.println("使用者名稱: "+c.getValue()); out.println("<br>"); } if(c.getName().equals("lastVisited")){ out.println("上次登入的時間: "+c.getValue()); } } }else{ out.println("No cookie !"); } out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } |