1. 程式人生 > >Cookie&Seesion會話 共享數據 工作流程 持久化 Servlet三個作用域 會話機制

Cookie&Seesion會話 共享數據 工作流程 持久化 Servlet三個作用域 會話機制

request getname 第一次 關閉瀏覽器 XP 響應 宋體 () 創建者

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 CookieAPI

方法名

描述

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 SessionAPI

n 保存數據

u setAttribute(String name,Object obj)

n 獲得數據

u getAttribute(String name);

n 刪除數據

u removeAttribute(String name)

1.1 小結:CookieSession的選取

* 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三個作用域 會話機制