Cookie&Seesion會話 共享數據 工作流程 持久化 Servlet三個作用域 會話機制
Day37 Cookie&Seesion會話
1.1.1 什麽是cookie
當用戶通過瀏覽器訪問Web服務器時,服務器會給客戶端發送一些信息,這些信息都保存在Cookie中。這樣,當該瀏覽器再次訪問服務器時,都會在請求頭中將Cookie發送給服務器,方便服務器對瀏覽器做出正確的響應。
1.1.2
1.1.3
1.1.4
1.1.5 會話技術
l 概念:
用戶打開瀏覽器,點擊多個超鏈接訪問服務器的web資源,然後關閉瀏覽器,整個過程稱之為一次會話.(打電話)
l 作用:
每個用戶與服務器進行交互過程中,產生各自的數據,程序想要將這個數據進行保存,就需要使用會話技術.
一次會話中多次請求之間共享數據
1.1.6 Cookie執行原理(工作流程):
瀏覽器訪問服務器,服務器產生鍵值對的形式(cookie),通過響應(響應頭 set-cookie)返回給瀏覽器,cookie保存在瀏覽器上,下次訪問的服務器時候,根據一定的規則攜帶不同的cookie,通過請求(請求頭 cookie)攜帶,服務器就可以拿到這些cookie
l Cookie和緩存的區別(了解).
n 緩存是瀏覽器自動進行處理的
n Cookie是服務器要求瀏覽器保存的數據
1.1.7 Cookie的API
方法名 |
描述 |
getName() |
獲得cookie名稱。 |
getValue() |
獲得cookie的值。 |
setMaxAge(int expiry) |
設置cookie的有效時間。 l 如果沒有設置,cookie只緩存瀏覽器緩存中,瀏覽器關閉,cookie刪除。 l 如果設置有效時間,在時間範圍內,cookie被寫入到瀏覽器端,關閉瀏覽器下次訪問仍可獲得,直到過期。 |
setPath(java.lang.String uri) |
設置cookie允許被訪問的路徑。設置的路徑,以及子路徑都被允許訪問。 l 例如:setPath("/web/a/b"); http://localhost:8080/web/a/b/oneServlet,可訪問(當前路徑) http://localhost:8080/web/a/b/c/oneServlet,可訪問 http://localhost:8080/web/a/c/oneServlet,不允許訪問(無關路徑) l 常見設置:setPath(“/”) ,當前tomcat下的所有的web項目都可以訪問 |
1.1.7.1 Session概念
Session是服務器端會話技術
提供一種方式,跨多個頁面請求或對 Web 站點的多次訪問標識用戶並存儲有關該用戶的信息(一個會話多次請求之間共享數據)
一次會話中,如果需要數據保存到服務器端.創建一個Session對象用來保存數據.(一次會話對應一個Session對象)
1.1.7.2 Session執行原理
l 生命周期(了解)
Session對象創建到銷毀的過程
n 創建
u 創建時間:第一次調用request.getSession();
u 創建者:tomcat服務器
n 銷毀
u 超時
默認Session的有效時間為30分鐘.當瀏覽器關閉時,會話級別的cookie就自動銷毀了,無法獲得sessionid,就不能獲得服務器端的Session對象,但服務器端的Session依然存在.
Tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
u 服務器非正常關閉
u 手動調用方法
session.invalidate(); 實際開發中不用
l Session的API
n 保存數據
u setAttribute(String name,Object obj)
n 獲得數據
u getAttribute(String name);
n 刪除數據
u removeAttribute(String name)
1.1 小結:Cookie和Session的選取
* Cookie是有大小和個數的限制的.Session存到服務器端的技術,沒有大小和個數的限制.
Cookie常用於:登錄”記住我”, ”瀏覽記錄”
* Cookie相對於Session來講不安全.
Session常用於: 用戶登錄
數據安全的信息保存Session,不安全的保存到Cookie
1.2 Servlet三個作用域
l ServletContext針對一個WEB項目
n 創建:服務器啟動時,為每一個項目創建一個
n 銷毀:服務器關閉或者項目被移除時
n 作用域:整個web項目共享,數據永久共享.
l HttpSession針對一個會話,一個會話多次請求之間共享數據
n 創建:第一次使用getSession()
n 銷毀
u 超時
u 手動關閉
u 服務器非正常關閉
n 作用域: 一次會話中共享數據(多次請求多次響應中,多個servlet之間共享數據)
l HttpServletRequest針對一次請求
n 創建:客戶端向服務器端發送請求.使用該對象保存數據,一次請求中數據有效
n 銷毀:服務器開始響應時
n 作用域:一次請求中多個servlet之間共享數據,用於請求轉發
l 3個作用範圍?
servletConetext > Session > Request
實際開發中原則: 能小不大
l 通用API
n 保存數據
u setAttribute(String name,Object obj)
n 獲得數據
u getAttribute(String name);
n 刪除數據
u removeAttribute(String name)
Session會話機制:
Session基於Cookie的工作流程:
(1)當用戶通過瀏覽器進程第一次請求一個支持會話的資源時,Servlet容器會為這個會話創建一個HttpSession對象,並為其分配一個唯一的ID,當前會話就此開始。
(2)把這個唯一的ID以name為JSESSIONID的Cookie形式添加到響應中,返回給客戶端保存。(當Cookie被禁用時,使用URL重寫機制,在URL後添加;jsessionid=XXX以傳輸HttpSession對象標識)
(3)當瀏覽器進程再次請求這個支持會話的資源時,會在請求頭中加上一直保持著的JSESSIONID,Servlet容器會在HTTP請求頭中自動查找這個Cookie(也可以通過HttpSession.getId()方法主動獲取),如果找到,就取出對應HttpSession對象(其實用戶第一次訪問,也會進行相同的查詢,因為查詢不到,才會執行創建操作)。
Cookie&Seesion會話 共享數據 工作流程 持久化 Servlet三個作用域 會話機制