JavaWeb學習總結(六)Cookie的使用(一)

一、會話的概念

  會話可簡單理解爲:用戶開一個瀏覽器,點擊多個超鏈接,訪問服務器多個web資源,然後關閉瀏覽器,整個過程稱之爲一個會話。
  有狀態會話:一個同學來過教室,下次再來教室,我們會知道這個同學曾經來過,這稱之爲有狀態會話。

二、會話過程中要解決的一些問題?

  每個用戶在使用瀏覽器與服務器進行會話的過程中,不可避免各自會產生一些數據,程序要想辦法爲每個用戶保存這些數據。

三、保存會話數據的兩種技術

3.1、Cookie

  Cookie是客戶端技術,程序把每個用戶的數據以cookie的形式寫給用戶各自的瀏覽器。當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶着各自的數據去。這樣,web資源處理的就是用戶各自的數據了。

3.2、Session

  Session是服務器端技術,利用這個技術,服務器在運行時可以爲每一個用戶的瀏覽器創建一個其獨享的session對象,由於session爲用戶瀏覽器獨享,所以用戶在訪問服務器的web資源時,可以把各自的數據放在各自的session中,當用戶再去訪問服務器中的其它web資源時,其它web資源再從用戶各自的session中取出數據爲用戶服務。

四、Cookie使用範例

4.1、使用cookie記錄用戶上一次訪問的時間

public class demoCookie extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //設置服務器端以UTF-8編碼進行輸出
        response.setCharacterEncoding("UTF-8");
        //設置瀏覽器以UTF-8編碼進行接收,解決中文亂碼問題
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //獲取瀏覽器訪問訪問服務器時傳遞過來的cookie數組
        Cookie[] cookies = request.getCookies();
        //如果用戶是第一次訪問,那麼得到的cookies將是null
        if (cookies!=null) {
            out.write("您上次訪問的時間是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastAccessTime")) {
                    Long lastAccessTime =Long.parseLong(cookie.getValue());
                    Date date = new Date(lastAccessTime);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("這是您第一次訪問本站!");
        }
        
        //用戶訪問過之後重新設置用戶的訪問時間,存儲到cookie中,然後發送到客戶端瀏覽器
        Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");//創建一個cookie,cookie的名字是lastAccessTime
        //將cookie對象添加到response對象中,這樣服務器在輸出response對象中的內容時就會把cookie也輸出到客戶端瀏覽器
        response.addCookie(cookie);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

4.2、設置cookie有效期

//用戶訪問過之後重新設置用戶的訪問時間,存儲到cookie中,然後發送到客戶端瀏覽器
Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");//創建一個cookie,cookie的名字是lastAccessTime
//設置Cookie的有效期爲1天
cookie.setMaxAge(24*60*60);
//將cookie對象添加到response對象中,這樣服務器在輸出response對象中的內容時就會把cookie也輸出到客戶端瀏覽器
response.addCookie(cookie);

五、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。

5.1、刪除Cookie

注意:刪除cookie時,path必須一致,否則不會刪除

public class demoCookie2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //創建一個名字爲lastAccessTime的cookie
        Cookie cookie = new Cookie("lastAccessTime", System.currentTimeMillis()+"");
        //將cookie的有效期設置爲0,命令瀏覽器刪除該cookie
        cookie.setMaxAge(0);
        response.addCookie(cookie);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

5.2、cookie中存取中文

  要想在cookie中存儲中文,那麼必須使用URLEncoder類裏面的encode(String s,String enc)方法進行中文轉碼,例如:

Cookie cookie = new Cookie("userName", URLEncoder.encode("孤傲蒼狼", "UTF-8"));
response.addCookie(cookie);
        在獲取cookie中的中文數據時,再使用URLDecoder類裏面的decode(String s,String enc)進行解碼,例如:

URLDecoder.decode(cookies[i].getValue(), "UTF-8")

七、原博文地址:http://www.cnblogs.com/xdp-gacl/p/3803033.html




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章