1 狀態管理 a) 什麼是狀態管理?將瀏覽器與web伺服器之間多次交互當做一個整體處理,並且將多次交互涉及的數據(即狀態)保存下來. b) 如何進行狀態管理? c) Cookie d) 讀取CookieCookie[] request.getCookies();註:有可能返回null;String ...
1 狀態管理
a) 什麼是狀態管理?
將瀏覽器與web伺服器之間多次交互當做一個整體處理,並且將多次交互涉及的數據(即狀態)保存下來.
b) 如何進行狀態管理?
- 可以將狀態保存在客戶端
將狀態保存到瀏覽器這邊,通常使用Cookie技術 - 將狀態保存到伺服器端(session 會話)
c) Cookie
- 什麼是coolie?
伺服器為了識別用戶身份臨時存在瀏覽器端的少量數據. - 工作原理
瀏覽器訪問伺服器時,伺服器將一些數據已set-cookie消息頭的形式發送給瀏覽器.瀏覽器會將這些數據臨時保存下來;當瀏覽器再次訪問伺服器時,會將這些數據以cookie消息頭的形式發送給伺服器 - 添加cookie
cookie c = new cookie(string name,string value);
註:name:cookie名稱 value:cookie值
response.addCookie(c);
d) 讀取Cookie
Cookie[] request.getCookies();
註:有可能返回null;
String cookie.getName();
String cookie.getValue();
e) 編碼問題
- Cookie只能存放合法的ascii字元.
- 如果要存放中文,可以將中文轉換成合法的ascii字元形式.
String URLEncoder.encode(String str,String charset)
String URLdecode,decode(String str,String charset)
註:建議添加cookie時,都統一編碼(使用以上對保存的數據進行處理)
f) 生存時間問題
cookie.setMaxAge(int seconds);//設置生存時間
- 單位是秒
- Sencods>0 瀏覽器通常會將cookie保存在硬碟上,超過指定的時間,cookie失效.
sencods<0 預設值(瀏覽器會將cookie保存在記憶體中)
sencods=0 刪除cookie.將cookie的時間設置為0就刪除了.
g) Cookie的路徑問題
- 什麼是cookie的路徑問題?
瀏覽器訪問伺服器上某地址,會比較請求地址是否符合cookie的路徑要求,只有符合的cookie才會被髮送。 - Cookie的預設路徑?
等於添加cookie的web組件的路徑:比如:/servlet-day06/biz01/addCookie.jsp添加了一個cookie則cookie的預設路徑是/servlet-day06/biz0. - 匹配規則:
要訪問的地址必須是cookie的路徑或者其子路徑. - 設置cookie路徑
cookie.setPath(String path);
h) Cookie的限制
- Cookie不安全.(敏感數據要加密處理)
- Cookie可以被用戶禁止.
- Cookie只能保存少量數據(大約4k).
- 瀏覽器端保存的cookie的數量也有限制.(幾百個)
- Cookie只能保存字元串.
2 Session(會話)
a) 什麼是session?
伺服器端為了保存狀態而創建的一個特殊的對象.
b) 工作原理
瀏覽器訪問伺服器時,伺服器創建一個特殊的對象session(該對象有唯一一個id,稱之為sessionid)伺服器會將sessionid以cookie的形式發送給瀏覽器;當瀏覽器在訪問時,會將sessionid發送過來,伺服器端可以利用這個session找到對應的session對象.
c) 如何獲得session對象?
- 方式一
httpSession session = request.getSession(boolean flag);
當flag為true時,先查看請求當中有沒有sessionid,如果沒有則創建一個session對象,如果有,依據sessionid查找對應的session對象.如果找到則返回,找不到會創建一個新的session對象.
當flag為false時,先查看請求當中有沒有sessionid,如果沒有則返回null,如果有,依據sessionid查找對應的session對象.如果找到則返回,找不到返回null. - 方式二
httpSession session = request.getSession();
等價於request.getSession(true);
d) 幾個方法
- String session.getId();
- setAttrbute(String name,object obj);
- Object getAttrbute(string name);
- removeAttrbute(string name);//解除綁定
e) session超時
- 什麼是session超時?
伺服器會將空閑時間過長的session對象刪除掉.
註:為了節省記憶體空間的占用.伺服器預設的超時限制一般是30分鐘. - 怎麼修改?
配置文件(web.xml)中修改session config的時間數值. - SetMaxInactiveInterval(int second);//兩次請求之前的最大間隔時間.如果超過了時間限制則伺服器會銷毀session對象.
f) 刪除session
invalidate();