深入理解HTTP Session

2022-09-16 16:03:15 字數 2208 閱讀 6805

session在web開發中是乙個非常重要的概念,這個概念很抽象,很難定義,也是最讓人迷惑的乙個名詞,也是最多被濫用的名字之一,在不同的場合,session一次的含義也很不相同。這裡只**http session。

為了說明問題,這裡基於j**a servlet理解session的概念與原理,這裡所說servlet已經涵蓋了jsp技術,因為jsp最終也會被編譯為servlet,兩者有著相同的本質。

在j**a中,http的session物件用j**ax.servlet.http.httpsession來表示。

1、概念:session代表伺服器與瀏覽器的一次會話過程,這個過程是連續的,也可以時斷時續的。在servlet中,session指的是httpsession類的物件,這個概念到此結束了,也許會很模糊,但只有看完本文,才能真正有個深刻理解。

2、session建立的時間是:

乙個常見的誤解是以為session在有客戶端訪問時就被建立,然而事實是直到某server端程式呼叫 httpservletrequest.getsession(true)這樣的語句時才被建立,注意如果jsp沒有顯示的使用 <% @page session="false"%> 關閉session,則jsp檔案在編譯成servlet時將會自動加上這樣一條語句 httpsession session = httpservletrequest.getsession(true);這也是jsp中隱含的 session物件的來歷。

由於session會消耗記憶體資源,因此,如果不打算使用session,應該在所有的jsp中關閉它。

引申:1)、訪問*.html的靜態資源因為不會被編譯為servlet,也就不涉及session的問題。

2)、當jsp頁面沒有顯式禁止session的時候,在開啟瀏覽器第一次請求該jsp的時候,伺服器會自動為其建立乙個session,並賦予其乙個sessionid,傳送給客戶端的瀏覽器。以後客戶端接著請求本應用中其他資源的時候,會自動在請求頭上新增:

cookie:jsessionid=客戶端第一次拿到的session id

這樣,伺服器端在接到請求時候,就會收到session id,並根據id在記憶體中找到之前建立的session物件,提供給請求使用。這也是session使用的基本原理----搞不懂這個,就永遠不明白session的原理。

、session刪除的時間是:

1)session超時:超時指的是連續一定時間伺服器沒有收到該session所對應客戶端的請求,並且這個時間超過了伺服器設定的session超時的最大時間。

2)程式呼叫httpsession.invalidate()

3)伺服器關閉或服務停止

4、session存放在**:伺服器端的記憶體中。不過session可以通過特殊的方式做持久化管理。

5、session的id是從**來的,sessionid是如何使用的:當客戶端第一次請求session物件時候,伺服器會為客戶端建立一 個session,並將通過特殊演算法算出乙個session的id,用來標識該session物件,當瀏覽器下次(session繼續有效時)請求別的資 源的時候,瀏覽器會偷偷地將sessionid放置到請求頭中,伺服器接收到請求後就得到該請求的sessionid,伺服器找到該id的session 返還給請求者(servlet)使用。乙個會話只能有乙個session物件,對session來說是只認id不認人。

6、session會因為瀏覽器的關閉而刪除嗎?

不會,session只會通過上面提到的方式去關閉。

7、同一客戶端機器多次請求同乙個資源,session一樣嗎?

一般來說,每次請求都會新建立乙個session。

其實,這個也不一定的,總結下:對於多標籤的瀏覽器(比如360瀏覽器)來說,在乙個瀏覽器視窗中,多個標籤同時訪問乙個頁面,session 是乙個。對於多個瀏覽器視窗之間,同時或者相隔很短時間訪問乙個頁面,session是多個的,和瀏覽器的程序有關。對於乙個同乙個瀏覽器視窗,直接錄入 url訪問同一應用的不同資源,session是一樣的。

8、session是乙個容器,可以存放會話過程中的任何物件。

9、session因為請求(request物件)而產生,同乙個會話中多個request共享了一session物件,可以直接從請求中獲取到session物件。

10、其實,session的建立和使用總在服務端,而瀏覽器從來都沒得到過session物件。但瀏覽器可以請求servlet(jsp也是 servlet)來獲取session的資訊。客戶端瀏覽器真正緊緊拿到的是session id,而這個對於瀏覽器操作的人來說,是不可見的,並且使用者也無需關心自己處於哪個會話過程中。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...