會話:瀏覽器訪問服務器端,發送屢次請求,接受屢次響應。直到有一方斷開鏈接。會話結束。
解決問題:能夠使用會話技術,在一次會話的屢次請求之間共享數據。
分類:
客戶端會話技術 Cookie
服務器端會話技術 Session數組
客戶端會話技術:Cookie 小餅乾的意思
服務器端不須要管理,方便。可是不安全。
原理:
1.客戶端第一次請求服務器端,服務器做出響應時,會發送set-cookie頭,攜帶須要共享的數據
2.當客戶端接受到這個響應,會將數據存儲在客戶端
3.當客戶端再次請求服務器端時,會經過cookie請求頭攜帶着存儲的數據。
4.服務器接受帶請求,會獲取客戶端攜帶的數據。
Java代碼實現:
1.發送cookie
//1.建立Cookie對象。
Cookie c = new Cookie("name","zhangsan");
//2.經過response發送cookie
response.addCookie(c);
2.接收cookie
//1.獲取全部cookie數組
Cookie[] cs = request.getCookies();
//2.遍歷數組
if(cs != null){
for (Cookie c : cs) {
//獲取cookie的名稱
String name = c.getName();
//判斷名稱,獲得目標cookie
if("name".equals(name)){
//獲取值
String value = c.getValue();
System.out.println(name+":"+value);
}
}
}
Cookie的細節:
1.默認狀況下,cookie保存在客戶端瀏覽器內存中。
須要將數據持久化存儲在客戶端的硬盤上。
設置cookie的存活時間。setMaxAge(int s);
2.Cookie是不支持中文數據的。若是要想存儲中文數據。須要轉碼。
URL編碼
功能:記住用戶名和密碼瀏覽器
服務器端會話技術:Session 主菜的意思
服務器端須要管理數據,麻煩,可是安全。
原理:
1.客戶端訪問服務器端,在服務器端的一個對象(Session)中存儲了數據
2.服務器給客戶端做出響應時,會自動將session對象的id經過響應頭 set-cookie:jsessionid=xxx 發送到客戶端
3.客戶端接受到響應,將頭對應的值存儲到客戶端
4.客戶端再次請求時,會攜帶着請求頭 cookie:jsessionid=xxx.
5.服務器接受到請求,經過jsessionid的值,找到對應的session對象。就能夠獲取對象中存儲的數據了。
Session技術依賴於cookie。
獲取session
HttpSession session = request.getSession();
域對象:
setAttribute():
getAttribute():
removeAttribute():
session細節:
1.客戶端關閉了,兩次session同樣嗎?
不同。由於客戶端瀏覽器內存釋放了,jsessionid沒了。
服務器關閉了,兩次session同樣嗎?
不同。由於服務器內存釋放了,session對象沒了。
session的鈍化:
當服務器正常關閉時,會將session對象寫入到服務器的硬盤上。
session的活化:
當服務器正常啓動時,會將session文件還原爲session對象
2.session對象的銷燬
1.session超時
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2.invalidate():session銷燬
3.服務器關閉。
3.session依賴於cookie,若是客戶端禁用了cookie,那麼session該咋辦?
URL重寫。安全
4.getSession方法的重載:
boolean:
true:默認值
經過id查找session,若是沒找到,新建立一個
false:
經過id查找session,若是沒找到,返回null
第一次建立一個新的對象服務器