簡單的理解:用戶打開瀏覽器,點擊多個超連接,訪問Web服務器上多個資源,而後關閉瀏覽器,整個過程稱之爲一次會話。java
每一個用戶在使用瀏覽器與服務器會話的過程當中,會產生一些用戶數據,如用戶登錄標記,WEB應用程序必需要爲每一個用戶在一次或屢次會話過程當中保存這些數據。web
HttpSession
簡稱Session,是服務器端技術,服務器在運行時爲每一個用戶的瀏覽器建立一個其獨享的HttpSession對象。因爲用戶各自獨享session,因此能夠把各自的數據存放在各自的session域中,當用戶去訪問當前web應用其餘web資源時,其餘web資源再從用戶各自的session中取出數據爲其服務。數組
一、javax.servlet.http.Cookie
Cookie的屬性:瀏覽器
name:必須的,Cookie名緩存
有一個cookie它的路徑是:/app/servlet/
當瀏覽器訪問的新資源的路徑是:/app/1.jsp
問?瀏覽器會將該cookie帶給1.jsp嗎?不會服務器當瀏覽器訪問的新資源的路徑是:/app/servlet/a/b/ServletDemo1
問?瀏覽器會將該cookie帶給ServletDemo1嗎?
會
總結:在訪問一個資源時,帶不帶已有的cookie。訪問的資源路徑.startsWith(cookie的path),若是爲true,則會帶cookie
若是把一個Cookie的path設置成了/app/
,說明訪問/app/
下面的任何資源,都會帶cookie過去。session
domain:默認就是產生Cookie的Servlet所在的網站域名併發
加入cookie的domain是www.baidu.com
訪問http://www.163.com帶不帶?不帶app
maxAge:標識cookie的生命週期。默認是一次會話
要想在客戶端的緩存中保存住Cookie的數據,增大它的存活時間。單位是秒
若是取值爲0,就是要刪除之。
二、服務器向客戶端寫Cookie
response.addCookie(Cookie cookie);對應設置響應頭的「Set-Cookie」
三、獲取客戶端提交過來的Cookie
Cookie[] cookies = request.getCookies();接着遍歷cookies數組肯定所需的Cookie
四、如何惟一肯定一個Cookie(有同名Cookie狀況)
經過domain+path+name,能夠肯定惟一一個Cookie
五、其餘
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對象。
void setAttribute(String name,Object obj) 設置屬性
void removeAttribute(String name) 移除屬性
Object getAttribute(String name) 獲取屬性
3.1 客戶端向服務器第一次發送請求的時候,request中並沒有sessionID.
3.2 此時server端會建立一個session對象,並分配一個sessionID,serssion對象會保存在服務器端。此時session的狀態處於new state狀態,若是調用session.isNew(),則返回true
3.3 當服務器段處理完畢後,將此sessionID,以Cookie的形式傳到客戶段。
3.4 當客戶段再次發送請求時,會將sessionID 同request參數一塊兒發送,傳遞給服務器端。
3.5 服務器端能夠根據傳遞過來的sessionID將此次請求(request)與保存在服務器端的session對象聯繫起來,此時的session已不處於new state狀態,若是調用session.isNew(),則返回false.
3.6 循環3-5 ,直到session超時或被銷燬。
HttpSession對象默認超時爲30分鐘。
4.1 更改HttpSession的默認超時時間:
在web.xml中配置
1 2 3 |
<session-config> <session-timeout>1</session-timeout><!--單位爲1分鐘--> </session-config> |
一、IE7-(含):開啓一次新的瀏覽器進程就是一次新的會話。 二、IE8+(含):開啓一次新的瀏覽器進程與原開啓的進程屬於同一次會話。(「文件」/」新建會話」) 三、開啓了一個頁面,再開啓一個新的Tab頁.也是同一次會話 四、開啓了一個頁面,在此頁面上鍊接到了另一個頁面(在新窗口打開的).也是同一次會話