1. 程式人生 > >深入理解cookie與session

深入理解cookie與session

1.狀態管理
伺服器對使用者訪問的狀態進行管理
http請求是一次性請求,但同一使用者可能會通過http協議向伺服器傳送多次請求
用了管理使用者多次請求(登入開始到退出為止,中間多次請求操作為同一使用者),此時
需要對使用者進行狀態管理
狀體管理的兩種方式:
1.在客戶端儲存資料管理狀態(cookie)
2.在伺服器端儲存資料管理狀態(session)

2.session
使用者首次訪問伺服器,伺服器會為每個使用者單獨建立一個session物件(HttpSession),
併為每個session分配唯一一個id(sessionId),sessionId通過cookie儲存到使用者端,
。當用戶再次訪問伺服器時,需將對應的sessionId攜帶給伺服器,伺服器通過這個唯一
sessionId就可以找到使用者對應的session物件,從而達到管理使用者狀態
1.獲得session物件
a.request.getSession(flag);
當flag=true時,伺服器會查詢使用者是否用sessionId,如果sessionId為Null,
則伺服器會建立一個新的session物件返回給使用者(sessionId)
如果sessionId存在,則會根據對應的sessionId去查詢session物件,如果session
物件存在則直接返回,如果不存在則建立新的session物件並返回。
當flag=false;伺服器會查詢使用者是否用sessionId,如果sessionId為Null,則返回
為null,如果sessionId,則會根據對應的sessionId去查詢session物件,如果session
物件存在則直接返回,如果不存在則返回為Null。
b.request.getSession();
等效於request.getSession(true);
2.session常用API
存:session.setAttribute(key,value);
取:session.getAttribute(key);
刪除:session.removeAttribute(key);


-------------------------------------------------------
1.狀態管理
前提:http協議請求是一次性請求。但在通常情況下又需要記住使用者,管理使用者狀態
2.狀態管理方式方法
1.客戶端儲存資料(Cookie)
2.伺服器端(Session)
3.session
因為使用者首次訪問,伺服器會檢查sessionId沒有則建立session物件,並將物件的sessionId
傳送給使用者(response物件,以cookie方式),當用戶再次訪問,需要攜帶對應的sessionId
(request物件,以cookide方式),伺服器會檢查對應sessionId,存在則查詢對應的session物件
並返回給使用者。如果sessionId存在而對應session物件不存在,伺服器會建立新的session物件並
將這個新得到sessionId返回給使用者。
4.session的API
a.HttpSession session=request.getSession(true/false);
b.HttpSession session=request.getSession();
public static HttpSession getSession(){
return getSession(true);
}
//過載的方法之間經常重用
例如:點與圓之間的距離
class Circle{
double getDistance(int x,int y){
return Math.sqrt((this.x-x)(this.x-x)-(this.y-y)(this.y-y));
}
double getDistance(Point p){
return getDistance(p.getX(),p.getY());
}
}
c.session.setAttribute(key,value);
d.session.getAttribute(key);-value(Object)
e.session.removeAttribute(key);
f.session.getSessionId();
【練習】使用session記錄使用者的訪問次數
5.session的有效期
所有使用者的session物件都儲存在伺服器,則伺服器空間有限,所有不能永久儲存session
即sesion物件在伺服器中儲存的有效時間
  設定session有效期:
  1.//設定session有效期
session.setMaxInactiveInterval(15);
2.伺服器設定
<session-config>
       <session-timeout>30</session-timeout>
   </session-config>
3.在servlet對應的web.xml中配置
6.踢出session
session.invalidate();
7.Session失效
禁用cookie會導致session失效
原理:客戶端無法儲存伺服器傳送的sessionId,所以訪問時沒有sessionId,那麼根據
session建立原理,伺服器會建立新的session物件返回給使用者
解決方式:URL重寫