cookie技術:
在javax.servlet.http包下有個名為Cookie的類,通過該類就可以向用戶端設定cookie資料了。
cookie的建立:
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class cookie extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//建立兩個Cookie:
//import javax.servlet.http.Cookie 導的是這個包
//他就是以鍵 - 值得形式存在的啊
Cookie cookie_1 = new Cookie("user", "bihu");
Cookie cookie_2 = new Cookie("pass","a123456");
//生成好了 接下來綁定到響應體中:
response.addCookie(cookie_1);
response.addCookie(cookie_2);
//這樣的話 使用者GET請求頁面 那麼就會使用這兩個Cookie!!
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
那麼問題來了 ,我們可以在浏覽器看到:
不僅僅内容是顯示在外頭 而且 到期時間也僅關閉視窗,我們還可以看到 還有路徑,那麼我們該學會如何去保護這些 和 設定這些:
設定綁定路徑
預設綁定:
就是上面代碼中的單純設定Cookie 那麼他會預設綁定路徑,也就是途中看到的 /Cookie 如果你以後通路任何一個 : http://localhost:8080/Cookie/XXX,都會攜帶剛生成的Cookie,這就是預設綁定。
自定義綁定:
cookie除了預設綁定之外我們還可以手動設定其綁定路徑:
具體看代碼函數:
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class cookie extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//建立兩個Cookie:
//import javax.servlet.http.Cookie 導的是這個包
//他就是以鍵 - 值得形式存在的啊
Cookie cookie_1 = new Cookie("user", "bihu");
Cookie cookie_2 = new Cookie("pass","a123456");
//為Cookie綁定路徑 你可以分開綁定 自定義的
System.out.println(request.getContextPath());
cookie_1.setPath(request.getContextPath() + "/bihu");
cookie_2.setPath(request.getContextPath() + "/bihu");
//生成好了 接下來綁定到響應體中:
response.addCookie(cookie_1);
response.addCookie(cookie_2);
//這樣的話 使用者GET請求http://localhost:8080/Cookie/bihu/XXX頁面 那麼就會使用這兩個Cookie!! 完全自定義的
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
其中 request.getContextPath(),傳回目前頁面所在的應用的名字,還有就是 預設的頁面也可以用Cookie 我不知道為什麼 但是其他不能,就是說 你綁定了路勁後,
你通路的URL必須包含 : xxxxx:8080:/ 你綁定的路勁 / 你綁定的路勁 / XXX;
才有效 你自己可以用浏覽器試試 或者 你用Fidder去抓包
設定cookie的有效時長
預設情況下, Cookie 是儲存在浏覽器的緩存中的,關閉浏覽器後Cookie也就消失了。
開發者可以通過設定Cookie的有效時長,将Cookie寫入到用戶端硬碟檔案中。
可以通過下面的方法設定有效時長
public void setMaxAge(int expiry)
其中expiry的機關為秒,整型。
參數取值特性:
- 大于 0,則表示要将 Cookie 寫入到硬碟檔案中;
- 小于 0,則表示 Cookie 存放在浏覽器緩存中,與不設定時長等效;
- 等于 0,則表示 Cookie産生後直接失效。
注意可以設定cookie的值 ,用 Cookie 類中的 setvalue
也可以重複添加cookie,但會替代之前的。
代碼:
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class cookie extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//建立兩個Cookie:
//import javax.servlet.http.Cookie 導的是這個包
//他就是以鍵 - 值得形式存在的啊
Cookie cookie_1 = new Cookie("user", "bihu");
Cookie cookie_2 = new Cookie("pass","a123456");
//設定cookie的有效時長:
//public void setMaxAge(int expiry) 方法:
/*
* 大于 0,則表示要将 Cookie 寫入到硬碟檔案中;
*小于 0,則表示 Cookie 存放在浏覽器緩存中,與不設定時長等效;
*等于 0,則表示 Cookie産生後直接失效。
*/
cookie_1.setMaxAge(60 * 60 * 24 * 15); // 60 * 60 * 24 * 15 就是15天 注意的是 别設定幾秒或幾千秒 沒用的啊 浏覽器他不會計算的
cookie_2.setMaxAge(60 * 60 * 24 * 15);
//生成好了 接下來綁定到響應體中:
response.addCookie(cookie_1);
response.addCookie(cookie_2);
//這樣的話 使用者GET請求http://localhost:8080/Cookie/bihu/XXX頁面 那麼就會使用這兩個Cookie!! 完全自定義的
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
設定路徑 和 日期我都講了啊 至于加密 你自己去加密 但推薦Cookie别帶中文!!!!
接下來我們學習如何擷取啊 擷取Cookie:
伺服器端擷取請求的cookie
在 HttpServletRequest 中有一個方法getCookies(),專門用于讀取請求中所攜帶的 Cookie 資料,該方法的傳回值類型是Cookie數組。
比如:攜帶cookie時即可通路 但是注意的是:沒cookie時你别去擷取 ,不然cookie 會為空 ,會空指針異常:
代碼:
package Accept;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AcceptCookie extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//注意!確定通路AcceptCookie時 浏覽器是攜帶者Cokkie的 不然為空的話會報空指針異常!!
//用HttpServletRequest類種的 getCookies 方法來擷取Cookie對象數組
Cookie[] mCookie = request.getCookies();
//擷取好了 我們來周遊一下擷取到的 Cookie:
for(Cookie c : mCookie) {
System.out.println("Cookie Name :" + c.getName());
System.out.println("Cookie Velue :" + c.getValue());
System.out.println("Cookie Time :" + c.getMaxAge() + " S");
System.out.println("Cookie Domain :" + c.getDomain()); //擷取域
System.out.println("Cookie Path :" + c.getPath()); //擷取路徑
System.out.println("---------------------------------");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
我們列印下周遊結果: 都很準确的啊 更多的自己百度即可:
Cookie Name :user
Cookie Velue :bihu
Cookie Time :-1 S
Cookie Domain :null
Cookie Path :null
---------------------------------
Cookie Name :pass
Cookie Velue :a123456
Cookie Time :-1 S
Cookie Domain :null
Cookie Path :null
---------------------------------
練習