會話技術:cookie和session
2018-05-10 21:43:16
會話
從打開一個瀏覽器的某個站點到關閉這個瀏覽器的整個過程,叫做一次會話。會話技術用於記錄這次會話中客戶端的數據和狀態,它又分為cookie和session。
cookie:
數據存儲在客戶端,減少了服務器存儲的壓力,安全性較低,客戶端可以清除cookie
session:
數據存儲在服務器,服務器的存儲壓力較大,安全性較高
cookie技術
1)cookie的創建
Cookie cookie = new Cookie(name, value);
參數為String類型,不能用中文
cookie創建後會以響應頭的形式傳遞給客戶端
2)cookie的持續時間
默認:關閉瀏覽器cookie信息被銷毀
//為Cookie設置持久化時間
cookie.setMaxAge(60*10);//10分鐘,單位為秒
設置持續時間後,cookie信息會存儲到磁盤裏,並在時間過後銷毀信息
3)cookie的攜帶路徑
默認:會在訪問產生該cookie的web資源所在的路徑時,都攜帶cookie信息
cookie.setPath("/WEB16");
代表訪問WEB16應用中的任何資源都攜帶cookie
cookie.setPath("/WEB16/cookieServlet");
代表訪問WEB16中的cookieServlet時才攜帶cookie信息
4)想客戶端發送cookie
response.addCookie(Cookie cookie)
5)cookie的刪除
創建同名同路徑的cookie對象,並將持續時間設置為0s,對原來的cookie進行覆蓋
6)服務器接收cookie數據
//獲得客戶端攜帶的cookie數據
Cookie[] cookies = request.getCookies();
//通過cookie名稱獲得想要的cookie
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().equals("name")){
//獲取cookie的值
String cookieValue = cookie.getValue();
System.out.println(cookieValue);
}
}
}
session
session會在服務器為每個用戶創建一塊內存空間,用於存儲數據,客戶端每次都要攜帶JSESSIONID在服務器尋找對應的空間,而session借助cookie的存儲空間存儲JSESSIONID,因此session的實現基於cookie
1)session的創建
HttpSession session = request.getSession();
如果服務器沒有該會話的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失效(默認三十分鐘)
從何時開始計時?從不操作服務器端資源開始
<3>手動摧毀session
session.invalidate();
會話技術:cookie和session