一.Java提供的操作Cookie的API
Java中的javax.servlet.http.Cookie類用於創建一個Cookie
Cookie類的主要方法 |
|||
No. |
方法 |
類型 |
描述 |
1 |
構造方法 |
實例化Cookie對象,傳入cooke名稱和cookie的值 |
|
2 |
public String getName() |
普通方法 |
取得Cookie的名字 |
3 |
public String getValue() |
普通方法 |
取得Cookie的值 |
4 |
public void setValue(String newValue) |
普通方法 |
設置Cookie的值 |
5 |
public void setMaxAge(int expiry) |
普通方法 |
設置Cookie的最大保存時間,即cookie的有效期,當服務器給瀏覽器回送一個cookie時,如果在服務器端沒有調用setMaxAge方法設置cookie的有效期,那么cookie的有效期只在一次會話過程中有效,用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然后關閉瀏覽器,整個過程稱之為一次會話,當用戶關閉瀏覽器,會話就結束了,此時cookie就會失效,如果在服務器端使用setMaxAge方法設置了cookie的有效期,比如設置了30分鍾,那么當服務器把cookie發送給瀏覽器時,此時cookie就會在客戶端的硬盤上存儲30分鍾,在30分鍾內,即使瀏覽器關了,cookie依然存在,在30分鍾內,打開瀏覽器訪問服務器時,瀏覽器都會把cookie一起帶上,這樣就可以在服務器端獲取到客戶端瀏覽器傳遞過來的cookie里面的信息了,這就是cookie設置maxAge和不設置maxAge的區別,不設置maxAge,那么cookie就只在一次會話中有效,一旦用戶關閉了瀏覽器,那么cookie就沒有了,那么瀏覽器是怎么做到這一點的呢,我們啟動一個瀏覽器,就相當於啟動一個應用程序,而服務器回送的cookie首先是存在瀏覽器的緩存中的,當瀏覽器關閉時,瀏覽器的緩存自然就沒有了,所以存儲在緩存中的cookie自然就被清掉了,而如果設置了cookie的有效期,那么瀏覽器在關閉時,就會把緩存中的cookie寫到硬盤上存儲起來,這樣cookie就能夠一直存在了。 |
6 |
public int getMaxAge() |
普通方法 |
獲取Cookies的有效期 |
7 |
public void setPath(String uri) |
普通方法 |
設置cookie的有效路徑,比如把cookie的有效路徑設置為"/xdp",那么瀏覽器訪問"xdp"目錄下的web資源時,都會帶上cookie,再比如把cookie的有效路徑設置為"/xdp/gacl",那么瀏覽器只有在訪問"xdp"目錄下的"gacl"這個目錄里面的web資源時才會帶上cookie一起訪問,而當訪問"xdp"目錄下的web資源時,瀏覽器是不帶cookie的 |
8 |
public String getPath() |
普通方法 |
獲取cookie的有效路徑 |
9 |
public void setDomain(String pattern) |
普通方法 |
設置cookie的有效域 |
10 |
public String getDomain() |
普通方法 |
獲取cookie的有效域 |
二.Cookie實例
實例1 獲取網頁的最后訪問時間
獲取客戶端保存的最后訪問時間
public class ServletDemo extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub resp.setContentType("text/html;charset=UTF-8"); PrintWriter out=resp.getWriter(); //獲取客戶端保存的最后訪問時間 Cookie[] cookies=req.getCookies();//獲取客戶端的所有cookie對象 for(int i=0;cookies!=null&&i<cookies.length;i++) { if("lastAccessTime".equals(cookies[i].getName()))//判斷當前cookie中的name是否是想要的cookie { long l=Long.parseLong(cookies[i].getValue());//如果是想要的cookie,則把cookie輸出 out.print("你的最后訪問時間是:"+new Date(l).toLocaleString());//yyyy-MM-dd } } //創建Cookie,並把信息寫回客戶端 Cookie ck=new Cookie("lastAccessTime", System.currentTimeMillis()+""); //設置cookie的有效時間,單位是秒 ck.setMaxAge(60*1);//保存時間為5分鍾 //把cookie信息寫回客戶端瀏覽器 resp.addCookie(ck); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req,resp); } }
運行效果 cookie訪問時間會不斷地更新
實例二 刪除cookie
設置cookie的最大保存時間使用的是Cookie的setMaxAge() API,當setMaxAge設置為0時,表示刪除cookie。
刪除cookie時,務必要保證路徑一致
public class ClearServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //創建一個Cookie對象 Cookie ck=new Cookie("lastAccessTime", ""); ck.setPath("/");//設置被刪除cookie的path,否則可能刪錯對象 ck.setMaxAge(0);//相當於刪除 response.addCookie(ck);//將ck寫回客戶端緩存 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
三.cookie細節
1.一個Cookie只能標識一種信息,它至少含有一個標識該信息的名稱(NAME)和設置值(VALUE)。
2.一個WEB站點可以給一個WEB瀏覽器發送多個Cookie,一個WEB瀏覽器也可以存儲多個WEB站點提供的Cookie。
3.瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
4.如果創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie(即存儲在瀏覽器的內存中),用戶退出瀏覽器之后即被刪除。若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie。