Cookie API介紹


一.Java提供的操作Cookie的API

  Java中的javax.servlet.http.Cookie類用於創建一個Cookie

Cookie類的主要方法

No.

方法

類型

描述

1

Cookie(String name, String value)

構造方法

實例化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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM