cookie是一種會話技術。它能夠將需要的信息持久的保存在用戶的磁盤上以供下次請求資源時帶上這些信息。比如網址的自動登入。用戶第一次登入時將賬號密碼保存在用戶的磁盤上然後用戶再次訪問這個網址的時候就不需要再自己手動登入
在介紹cookie前需要先了解一些知識。
一,瀏覽器中的會話
當你打開瀏覽器然後訪問了多個網站在關閉瀏覽器的過程就是瀏覽器中的會話。這個過程也叫一次會話。
會話管理技術cookie介紹
在與瀏覽器會話的過程中總會產生各種數據。有些數據我們需要將其保存下來。這時候就要用到會話管理技術。cookie就是其中一種。還一種是session
cookie是客戶端技術,它會將用戶訪問服務器資源產生的數據保存在用戶客戶端的磁盤中。這樣在下次訪問同一個服務器資源的時候就能夠帶上這些用戶各自的數據來進行操作
1,創建一個cookie並添加到瀏覽器中
Cookie cookie = new Cookie(String name,String value);
方法 | 返回值 | 描述 |
---|---|---|
Cookie cookie = new Cookie(String name,String value); | 構造方法 | 創建一個cookie,這個cookie保存了一個name=value這樣的值 |
response.addCookie(Cookie cookie) | void | 該方法把一個cookie設置到瀏覽器中,在瀏覽器的響應頭中會有一個Set-Cookie:name=value這樣的值 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
//創建一個cookie,傳入一個name和value.下面這個cookie裏面就保存了一個name=zhangsan這樣的值
Cookie cookie = new Cookie("name","zhangsan");
//然後調用response.addCookie(Cookie cookie)後才能把cookie設置到瀏覽器中
response.addCookie(cookie);
}
然後啓動在訪問該資源
這樣一個Cookie就設置完了。
2,獲取Cookie
設置了Cookie就是爲了下次訪問能從這個Cookie上獲取數據。
方法 | 返回值 | 描述 |
---|---|---|
request.getCookies() | Cookie[] cookie | 獲取所有Cookie,返回一個Cookie數組.如果沒有Cookie返回null |
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
if(cookies!=null){
//這樣來獲取保存在客戶端上的cookie
for (Cookie cookie: cookies) {
System.out.println(cookie.getName()+"="+cookie.getValue());
//cookie的其他操作
}
}else{
Cookie cookie = new Cookie("name","zhangsan");
response.addCookie(cookie);
}
}
執行第一次設置cookie在執行第二次後結果如下
3,設置有效時間
cookie默認情況下在瀏覽器關閉後就會失效。即一次會話後就失效。因爲cookie是放在瀏覽器緩存的,瀏覽器關閉會清除緩存所以cookie會失效。要想使這個cookie在瀏覽器關閉後仍然有效就需要設置有效時間將其寫到磁盤下。
方法 | 返回值 | 描述 |
---|---|---|
cookie.setMaxAge(int second) | void | 設置cookie有效時間,單位爲秒,在有效時間內即便關閉了瀏覽器cookie也不會失效 |
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
Cookie cookie = new Cookie("name","zhangsan");
//設置有效時間爲60秒
cookie.setMaxAge(60);
response.addCookie(cookie);
}
然後執行結果如下:
在這60秒期間即便你關閉瀏覽器在打開然後在訪問該資源也能獲取cookie
4,設置有效路徑
有時你需要你設置的cookie在某個路徑下的資源都能共享使用,那就用以下這個方法。
方法 | 返回值 | 描述 |
---|---|---|
cookie.setPath(String url); | void | 設置有效路徑,在該路徑下的所有資源都能共享這個cookie |
有以下場景
/servlet1
public class ServletDemo1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
Cookie cookie = new Cookie("name","zhangsan");
//設置h5所在的路徑
String realPath = this.getServletContext().getRealPath("/html");
cookie.setPath(realPath);
response.addCookie(cookie);
}
}
//servlet2
public class ServletDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取cookie,如果有cookie就表示有效路徑設置成功
Cookie[] cookies = request.getCookies();
System.out.println(cookies);
}
}
//h5.html部分
<body>
<a href="http://localhost:8080/qjq/servletDemo2">訪問servletDemo2</a>
</body>
接着啓動項目,首先先進入h5.html訪問servletDemo2
結果如下,這時沒有cookie:
然後訪問servletDemo1設置一個cookie,在從h5.html訪問servletDemo2
結果如下,這時已經有cookie了說明有效路徑設置成功
5,Cookie的生命週期
Cookie也是一個類,我們需要關注一下它什麼時候生成什麼時候消亡。這樣我們才能更好的確定何時獲取Cookie
(1)Cookie的出生
當執行完這句代碼的時候就代表這個Cookie誕生
Cookie cookie = new Cookie(String name,String value);
(2)Cookie的消亡
默認情況下,在你關閉客戶端後Cookie就會消失。此時你去獲取cookie會返回null
如果設置了有效時間後則需要在有效時間到期後纔會消亡。
6,cookie的其他方法
方法 | 返回值 | 描述 |
---|---|---|
getPath() | String | 獲取cookie的有效路徑 |
getName() | String | 獲取cookie的名稱 |
getValue() | String | 獲取cookie的值 |
getMaxAge() | int | 獲取cookie的有效期,單位爲秒 |
setDomain(String pattern) | void | 設置cookie的有效域 |
getDomain(String pattern) | String | 獲取cookie的有效域 |