cookie/session的區別與聯繫

爲什麼要有cookie/session
在客戶端瀏覽器向服務器發送請求,服務器做出響應之後,二者便會斷開連接(一次會話結束)。那麼下次用戶再來請求服務器,服務器沒有任何辦法去識別此用戶是誰。
有了cookie可以向服務器證明用戶身份了,我們的web系統中是不是需要將用戶的詳細信息儲存在某個位置供頁面調用呢?用戶的詳細信息就包括姓名,年齡,性別等信息。而cookie是存在於客戶端的,將用戶詳細信息通過網絡發送到客戶端保存是極不安全的。且cookie大小不能超過4k,不能支持中文。這就限制cookie不能滿足存儲用戶信息的需求。這就需要一種機制在服務器端的某個域中存儲一些數據,這個域就是session。
總而言之,cookie/session的出現就是爲了解決http協議無狀態的弊端,爲了讓客戶端和服務端建立長久聯繫而出現的。

cookie技術
一、服務器端向客戶端發送一個Cookie
1. 創建Cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);
示例:
Cookie cookie = new Cookie("username","zhangsan");
那麼該cookie會以響應頭的形式發送給客戶端:
注意:Cookie中不能存儲中文
2. 設置Cookie在客戶端的持久化時間
cookie.setMaxAge(int seconds); ---時間秒
注意:如果不設置持久化時間,cookie會存儲在瀏覽器的內存中,瀏覽器關閉cookie信息銷燬(會話級別的cookie),如果設置持久化時間,cookie信息會被持久化到瀏覽器的磁盤文件裏;
3. 向客戶端發送cookie
response.addCookie(Cookie cookie);
4. 刪除客戶端的cookie
如果想刪除客戶端的已經存儲的cookie信息,那麼就使用同名同路徑的持久化時間爲0的cookie進行覆蓋即可

二、服務器端怎麼接受客戶端攜帶的Cookie
cookie信息是以請求頭的方式發送到服務器端的:
通過request獲得所有的Cookie:
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
         if(cookie.getName().equal(cookieName)){
          String cookieValue = cookie.getValue();
      }
    }

session技術
Session技術是將數據存儲在服務器端的技術,會爲每個客戶端都創建一塊內存空間存儲客戶的數據,但客戶端需要每次都攜帶一個標識ID去服務器中尋找屬於自己的內 存空間。所以說Session的實現是基於Cookie,Session需要藉助於Cookie存儲客 戶的唯一性標識;
1. 獲取session
 HttpSession session = request.getSession();
此方法會獲得專屬於當前會話的Session對象,如果服務器端沒有該會話的Session 對象會創建一個新的Session返回,如果已經有了屬於該會話的Session直接將已有 的Session返回(實質就是根據JSESSIONID判斷該客戶端是否在服務器上已經存在 session了)
2. 怎樣向session中存取數據
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3. Session對象的生命週期
創建:第一次執行request.getSession()時創建
銷燬:
1)服務器(非正常)關閉時
2)session過期/失效(默認30分鐘)
可以在工程的web.xml中進行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>

cookie/session的區別與聯繫
區別:
 1、Cookie和Session都是會話技術,Cookie是運行在客戶端,Session是運行在服務器端。
 2、Cookie有大小限制以及瀏覽器在存cookie的個數也有限制,Session是沒有大小限制和服務器的內存大小有關。cookie只能存放4k的數據,而session理論上沒有做限制
 3、Cookie有安全隱患,通過攔截或本地文件找得到你的cookie後可以進行攻擊。
 4、Session是保存在服務器端上會存在一段時間纔會消失,如果session過多會增加服務器的壓力。
聯繫:
 session雖說存放在服務器端,但是仔細看剛纔的執行流程你會明白,session是依賴於cookie的。

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