天天看點

14. javaEE - 操作Cookie

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 {
        
    }

}      

那麼問題來了 ,我們可以在浏覽器看到:

14. javaEE - 操作Cookie

不僅僅内容是顯示在外頭 而且 到期時間也僅關閉視窗,我們還可以看到 還有路徑,那麼我們該學會如何去保護這些 和 設定這些:

設定綁定路徑

預設綁定:

就是上面代碼中的單純設定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

---------------------------------

練習

1.實作擷取使用者上一次通路時間的功能,即當使用者通路伺服器,如果是非第一次通路的話,需要将上一次通路伺服器的時間給使用者顯示出來。

2.實作十天内免登陸的功能,當使用者成功登陸後,十天内可以自動登入。使用者名和密碼直接寫在代碼中即可。