Http協議是基於請求/響應模式、無狀態的協議;全部請求時相互獨立的、無連續的;服務器沒法記住與識別用戶。web
對於簡單的頁面瀏覽或信息獲取,http協議能夠徹底勝任;對於須要提供客戶端和服務器端交互的網絡應用則必須記住客戶端狀態。瀏覽器
會話就是一個接二連三的在在客戶端和服務器端進行請求響應的一系列交互。服務器
會話跟蹤就是在這些請求和響應中維護須要的數據信息,使得這些相關的請求和響應獲得正確的運做。cookie
會話的實現過程:網絡
- 當服務器端接收到客戶端的首次請求時,服務器初始化一個會話並分配給該會話一個惟一標識符
- 在之後的請求中,客戶端必須將惟一標識符包在請求中,服務器根據此標識符將請求與對應的會話聯繫起來。
實現會話跟蹤的技術:session
- 使用Cookie:全部的Http消息,無論是請求仍是響應均包含頭信息,由瀏覽器存儲在客戶端機器上的頭信息就稱做Cookie,以「屬性=屬性值;..」方式組成的文本信息;優勢:簡單性、基於文本的key-value對
- 建立Cookie : //Cookie c =new Cookie("userId","a1234");
- 設置最大時效:c.setMaxAge(60*60*24*7);
- 把cookie放入到http響應中:response.addCookie(c);
- 從客戶端讀取cookie:Cookie[] cookies=request.getCookies(); if(cookies!=null){for(int i =0;i<cookies.length;i++){Cookie cookie =cookies[i]; if(cookieName.equals(cookie.getName())){//do something with(codeValue)}}}
- cookie的屬性:
- getMaxAge(); //設置cookie到期時間
- getName(); //讀取cookie的名稱
- getValue(); //讀取/設置與cookie關聯的值
- URL重寫:
- 優勢:必須對全部指向您的網站的url進行編碼;全部頁面必須動態生成;不能使用預先記錄下來的url進行訪問
- 缺點:cookie被禁用或者根本不支持的狀況下依舊可以功能
- 隱藏的表單域
- <input type="hidden" name="session" value="..."/>
- 優勢:cookie被禁用或者根本不支持的狀況下依舊可以工做。
- 缺點:全部的頁面必須是表單提交以後的結果。
- 會話對象生存於服務器上;會話自動經過cookie或url重寫與客戶關聯起來,容許咱們將任何對象存儲到會話中
- HttpSession
- servlet容器提供httpsession接口來表明客戶端和服務器端的會話;當一個Servlet容器爲客戶端開始一個會話時,建立一個新的HttpSession對象,除了表明會話外,httpSession對象還能夠用於存儲與會話相關的信息
- httpSession會話跟蹤基礎:
- 訪問會話對象,request.getSession();
- getAttribute
- setAttribute
- removeAttribute,invalidate
會話失效:網站
經過web.xml的<session-timeout>,由程序來結束會話httpSession接口提供了invalidate()編碼