session的使用方法及例項

什麼是Session?

當我們訪問伺服器某個網頁的時候,會在伺服器端的記憶體裡開闢一塊記憶體,這塊記憶體就叫Session,而這個記憶體也是和瀏覽器是關聯在一起的。這個瀏覽器指的是瀏覽器視窗,或者是瀏覽器的子視窗,意思就是,只允許當前這個Session對應的瀏覽器訪問,就算是在同一個機器上新啟的瀏覽器也是無法訪問的。而另外一個瀏覽器也是需要記錄Session的話,就會再啟一個屬於自己的Session。

原理

HTTP協議是非連線性的,取完當前瀏覽器的內容,然後關閉瀏覽器後,連結就斷開了,而沒有任何機制去記錄取出後的資訊。而當需要訪問同一個網站的另外一個頁面時(就好比如在第一個頁面選擇購買的商品後,跳轉到第二個頁面去進行付款)這個時候取出來的資訊,就讀不出來了。所以必須要有一種機制讓頁面知道原理頁面的session內容

如何知道瀏覽器和這個伺服器中的session是一一對應的呢?又如何保證不會去訪問其它的session呢?

就是當訪問一個頁面的時候給瀏覽器建立一個獨一無二的號碼,也給同時建立的session賦予同樣的號碼。這樣就可以在開啟同一個網站的第二個頁面時獲取到第一個頁面中session保留下來的對應資訊(理解:當訪問第二個頁面時將號碼同時傳遞到第二個頁面。找到對應的session。)。這個號碼也叫sessionID,session的ID號碼,session的獨一無二號碼。

session的兩種實現方式(也就是傳遞方式):第一種通過cookies實現。第二種通過URL重寫來實現

第一種方式的理解:就是把session的id 放在cookie裡面(為什麼是使用cookies存放呢,因為cookie有臨時的,也有定時的,臨時的就是當前瀏覽器什麼時候關掉即消失,也就是說session本來就是當瀏覽器關閉即消失的,所以可以用臨時的cookie存放。儲存在cookie裡的sessionID一定不會重複,因為是獨一無二的。),當允許瀏覽器使用cookie的時候,session就會依賴於cookies,當瀏覽器不支援cookie後,就可以通過第二種方式獲取session記憶體中的資料資源。

第二種方式的理解:在客戶端不支援cookie的情況下使用。為了以防萬一,也可以同時使用。

如果不支援cookie,必須自己程式設計使用URL重寫的方式實現。

如何重寫URL:通過response.encodeURL()方法

encodeURL()的兩個作用

第一個作用:轉碼(說明:轉中文的編碼,或者一些其他特殊的編碼。就好比如網頁的連結中存在中文字元,就會轉換成為一些百分號或者其他的符號代替。)

第二個作用:URL後面加入sessionID,當不支援cookie的時候,可以使用encodeURL()方法,encodeUTL()後面跟上sessionID,這樣的話,在禁用cookie的瀏覽器中同時也可以使用session了。但是需要自己程式設計,只要連結支援,想用session就必須加上encodeURL()。

提示:若想程式中永遠支援session,那就必須加上encodeURL(),當別人禁用了cookie,一樣可以使用session。

規則:

如果瀏覽器支援cookie,建立session多大的時候,會被sessionID儲存再cookie裡。只要允許cookie,session就不會改變,如果不允許使用cookie,每重新整理一次瀏覽器就會換一個session(因為瀏覽器以為這是一個新的連結)

如果不支援cookie,必須自己程式設計使用URL重寫的方式實現session

Session不像cookie一樣擁有路徑訪問的問題,同一個application下的servlet/jsp都可以共享同一個session,前提下是同一個客戶端視窗。

Session中的一些常用方法說明

isNew():是否是新的Session,一般在第一次訪問的時候出現

getid():拿到session,獲取ID

getCreationTime():當前session建立的時間

getLastAccessedTime():最近的一次訪問這個session的時間。

getRrquestedSessionid: 跟隨上個網頁cookies或者URL傳過來的session

isRequestedSessionIdFromCookie():是否通過Cookies傳過來的

isRequestedSessionIdFromURL():是否通過重寫URL傳過來的

isRequestedSessionIdValid():是不是有效的sessionID

session有期限:

當一個網站的第一個視窗關掉了,而沒有繼續接著訪問第二個頁面,就沒有使用到session。那麼session會在中斷程式後立刻關閉session嗎?這個時候session就需要給它保留的時間,當最近一次訪問的時候開始計時,每重新整理一次重寫開始計時。當隔了這麼久的時間,沒有訪問這個session後,對不起,要關閉這個session了。session有過期時間,session什麼時候過期,要看配置,

session能幹什麼:

session就是伺服器裡面的一塊記憶體,記憶體裡面能放任何東西,只要是名值對就可以了。

session裡面的名字永遠都是String型別