1. 程式人生 > >儲存與獲取cookie和session中的資料

儲存與獲取cookie和session中的資料

、cookie與session的區別
1.Cookie
通俗講,是訪問某些網站後在本地儲存的一些網站相關資訊,下次訪問時減少一些步驟。更準確的說法是:Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案。
2.Session
存在伺服器的一種用來存放使用者資料的類HashTable結構。
瀏覽器第一次傳送請求時,伺服器自動生成了一HashTable和一Session ID來唯一標識這個HashTable,並將其通過響應傳送到瀏覽器。瀏覽器第二次傳送請求會將前一次伺服器響應中的Session ID放在請求中一併傳送到伺服器上,伺服器從請求中提取出Session ID,並和儲存的所有Session ID進行對比,找到這個使用者對應的HashTable。
一般這個值會有個時間限制,超時後毀掉這個值,預設30分鐘。
當用戶在應用程式的 Web頁間跳轉時,儲存在 Session 物件中的變數不會丟失而是在整個使用者會話中一直存在下去。
Session的實現方式和Cookie有一定關係。建立一個連線就生成一個session id,開啟幾個頁面就好幾個了,這裡就用到了Cookie,把session id存在Cookie中,每次訪問的時候將Session id帶過去就可以識別了.
區別
儲存資料量方面:session 能夠儲存任意的 java 物件,cookie 只能儲存 String 型別的物件
一個在客戶端一個在服務端。因Cookie在客戶端所以可以編輯偽造,不是十分安全。
Session過多時會消耗伺服器資源,大型網站會有專門Session伺服器,Cookie存在客戶端沒問題。
域的支援範圍不一樣,比方說a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解決這個問題的辦法是JSONP或者跨域資源共享。
二、儲存與獲取資料
1、在cookie中儲存與獲取資料
//1. 先寫cookie 可以給客戶端返回多個cookie
Cookie cookie = new Cookie(“name”, “zhangsan”);

    //2. 這個cookie的有效期。  預設情況下 ,

    //關閉瀏覽器後,cookie就沒有了。 ---> 針對沒有設定cookie的有效期。
    //  expiry: 有效 以秒計算。
    //正值 : 表示 在這個數字過後,cookie將會失效。
    //負值: 關閉瀏覽器,那麼cookie就失效, 預設值是 -1
    cookie.setMaxAge(60 * 60 * 24 * 7);

    //賦值新的值
    //cookie.setValue(newValue);

    //用於指定只有請求了指定的域名,才會帶上該cookie
    cookie.setDomain(".itheima.com");

    //只有訪問該域名下的cookieDemo的這個路徑地址才會帶cookie
    cookie.setPath("/CookieDemo");

    response.addCookie(cookie);

//傳送cookie給客戶端
Cookie cookie = new Cookie(“aa”, “bb”);
//給響應,新增一個cookie
response.addCookie(cookie);
response.getWriter().write(“請求成功了…”);

    //獲取客戶端帶過來的cookie
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie c : cookies) {
            String cookieName = c.getName();
            String cookieValue = c.getValue();
            System.out.println(cookieName + " = "+ cookieValue);
        }
    }

2、在session中獲取和儲存資料
String age= “123”;
request.getSession().setAttribute(“age”, age);
//key、value形式儲存資料
}
在jsp中獲取session資料:
session是jsp的內建物件,所以你可以直接寫在jsp的
<%
session.setAttribute(“age”, 123); //把123放到session裡,命名為age,
String c= session.getAttribute(“age”).toString();
//從session裡把a拿出來,並賦值給c
%>
在servlet中獲取session資料:
String c= request.getsession().getAttribute(“age”).toString();