Java-WEB 中Cookie的使用
今天講的是Cookies簡單應用,這個內容很重要,再講cookie之前介紹了一下會話:
什麼是會話?
在日常生活中,從撥通電話到結束通話電話之間的一連串的你問我答的過程就是一個會話。
會話可簡單理解為:使用者開一個瀏覽器,點選多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。
會話過程中要解決的一些問題?
每個使用者在使用瀏覽器與伺服器進行會話的過程中,不可避免各自會產生一些資料,伺服器要想辦法為每個使用者儲存這些資料。
例如:多個使用者點選超連結通過一個servlet各自購買了一個商品,伺服器應該想辦法把每一個使用者購買的商品儲存在各自的地方,以便於這些使用者點結帳
Cookie
Cookie是客戶端技術,伺服器把每個使用者的資料以cookie的形式寫給使用者各自的瀏覽器。當用戶使用瀏覽器再去訪問伺服器中的web資源時,就會帶著各自的資料去。這樣,web資源處理的就是使用者各自的資料了。
Cookie是一種在客戶端保持HTTP狀態資訊的技術,它好比商場發放的優惠卡。
Cookie是在瀏覽器訪問WEB伺服器的某個資源時,由WEB伺服器在HTTP響應訊息頭中附帶傳送給瀏覽器的一片資料,WEB伺服器傳送給各個客戶端瀏覽器的資料是可以各不相同的。
一旦WEB瀏覽器儲存了某個
WEB伺服器通過在HTTP響應訊息中增加Set-Cookie響應頭欄位將Cookie資訊傳送給瀏覽器,瀏覽器則通過在HTTP請求訊息中增加Cookie請求頭欄位將Cookie回傳給WEB伺服器。
javax.servlet.http.Cookie類用於建立一個Cookie,response介面也中定義了一個addCookie方法,它用於在其響應頭中增加一個相應的Set-Cookie頭欄位。 同樣,request
public Cookie(String name,String value)
setValue與getValue方法
setMaxAge與getMaxAge方法
setPath與getPath方法
setDomain與getDomain方法
getName方法
Set-Cookie:username=qiujy;Domain=localhost;path=/
Cookie:username=qiujy;$Path=/jsp_04_servlet
setPath:用於設定Cookie的有效目錄路徑。如果建立某個Cookie時沒有設定它的path屬性,那麼該Cookie只對當前訪問路徑所屬的目錄及其子目錄有效。如果想讓某個Cookie對站點的所有目錄下的訪問路徑都有效,應當設定為 “/”。
Domain 用於指定Cookie在哪個域中有效,瀏覽器在訪問這個域中的所有主機時,都將回傳這個Cookie資訊。
如 Path=/;Domain=.sina.com
一個Cookie只能標識一種資訊,它至少含有一個標識該資訊的名稱(NAME)和設定值(VALUE)。
一個WEB站點可以給一個WEB瀏覽器傳送多個Cookie,一個WEB瀏覽器也可以儲存多個WEB站點提供的Cookie。
瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB。
如果建立了一個cookie,並將他傳送到瀏覽器,預設情況下它是一個會話級別的cookie(即儲存在瀏覽器的記憶體中),使用者退出瀏覽器之後即被刪除。若希望瀏覽器將該cookie儲存在磁碟上,則需要使用maxAge,並給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該cookie。
注意,刪除cookie時,path必須一致,否則不會刪除
Cookie的簡單應用:
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//當客戶端訪問該servlet時,伺服器向客戶端寫cookie
//1.在伺服器端建立一個cookie
Cookie cookie = new Cookie("username","zhangsan");
Cookie cookie2 = new Cookie("password","123");
//2.設定cookie的存活時間,如果不設定,cookie不儲存。
cookie.setMaxAge(7*24*60*60);
cookie2.setMaxAge(7*24*60*60);
//3.將cookie寫到客戶端
response.addCookie(cookie);
response.addCookie(cookie2);
out.print("已經建立了cookie");
利用cookie設定讀取上次返回的時間:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("您上次訪問的時間是:");
//獲取客戶的cookie資訊
Cookie[] cookies = request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++){
if(cookies[i].getName().equals("lastAccessTime")){
long value = Long.parseLong(cookies[i].getValue());
Date date = new Date(value);
out.print(date.toLocaleString());
}
}
//把新的訪問時間寫給客戶,儲存到cookie中
Cookie cookie =new Cookie("lastAccessTime",System.currentTimeMillis()+"");
cookie.setMaxAge(30*24*3600);
cookie.setPath("/CookieDemo");
response.addCookie(cookie);