簡單的理解:用戶打開瀏覽器,點擊多個超鏈接,訪問Web服務器上多個資源,然后關閉瀏覽器,整個過程稱之為一次會話。
需要解決的問題每個用戶在使用瀏覽器與服務器會話的過程中,會產生一些用戶數據,如用戶登陸標記,WEB應用程序必須要為每個用戶在一次或多次會話過程中保存這些數據。
兩種技術HttpSession簡稱Session,是服務器端技術,服務器在運行時為每個用戶的瀏覽器創建一個其獨享的HttpSession對象。由于用戶各自獨享session,所以可以把各自的數據存放在各自的session域中,當用戶去訪問當前web應用其他web資源時,其他web資源再從用戶各自的session中取出數據為其服務。
Cookie類1、javax.servlet.http.CookieCookie的屬性:
name:必須的,Cookie名
有一個cookie它的路徑是:/app/servlet/當瀏覽器訪問的新資源的路徑是:/app/1.jsp問?瀏覽器會將該cookie帶給1.jsp嗎?不會
當瀏覽器訪問的新資源的路徑是:/app/servlet/a/b/ServletDemo1問?瀏覽器會將該cookie帶給ServletDemo1嗎?會總結:在訪問一個資源時,帶不帶已有的cookie。訪問的資源路徑.startsWith(cookie的path),如果為true,則會帶
如果把一個Cookie的path設置成了/app/,說明訪問/app/下面的任何資源,都會帶cookie過去。
domain:默認就是產生Cookie的Servlet所在的網站域名
加入cookie的domain是www.baidu.com訪問http://www.163.com帶不帶?不帶
maxAge:標識cookie的生命周期。默認是一次會話
要想在客戶端的緩存中保存住Cookie的數據,增大它的存活時間。單位是秒如果取值為0,就是要刪除之。
2、服務器向客戶端寫Cookieresponse.addCookie(Cookie cookie);對應設置響應頭的“Set-Cookie”
3、獲取客戶端提交過來的CookieCookie[] cookies = request.getCookies();接著遍歷cookies數組確定所需的Cookie
4、如何唯一確定一個Cookie(有同名Cookie情況)通過domain+path+name,可以確定唯一一個Cookie
5、其他
javax.servlet.http.HttpSession HttpSession技術實際上還是利用Cookie技術
HttpSession session = request.getSession();每一個HttpSession對象都有一個唯一的ID為了標識每一個客戶端,實際上向客戶端寫了一個特殊的Cookie:
request.getSession()方法詳解:
request.getSession(boolean b):如果b為true,作用等同于request.getSession()。 如果b為false,作用只是獲取。找不到則返回null。
session.invalidate():立刻摧毀服務器中的HttpSession對象。
2、HttpSession本身是一個域對象void setAttribute(String name,Object obj) 設置屬性void removeAttribute(String name) 移除屬性Object getAttribute(String name) 獲取屬性
3、HttpSession生命周期3.1 客戶端向服務器第一次發送請求的時候,request中并無sessionID.3.2 此時server端會創建一個session對象,并分配一個sessionID,serssion對象會保存在服務器端。此時session的狀態處于new state狀態,如果調用session.isNew(),則返回true3.3 當服務器段處理完畢后,將此sessionID,以Cookie的形式傳到客戶段。3.4 當客戶段再次發送請求時,會將sessionID 同request參數一起發送,傳遞給服務器端。3.5 服務器端可以根據傳遞過來的sessionID將這次請求(request)與保存在服務器端的session對象聯系起來,此時的session已不處于new state狀態,如果調用session.isNew(),則返回false.3.6 循環3-5 ,直到session超時或被銷毀。
4、HttpSession對象的狀態轉換HttpSession對象默認超時為30分鐘。4.1 更改HttpSession的默認超時時間:在web.xml中配置
123 | |
4.2 HttpSession對象狀態
新聞熱點
疑難解答