關於session的使用之我見

2021-08-29 19:01:22 字數 1543 閱讀 7597

在j2ee的開發與之用中,session所起到的作用是有目共睹的。它所能方便我們與伺服器之間進行會話,就好像人與人之間交流一樣。乙個會話用乙個session來表示,這樣就可以保證伺服器不會被忙暈了。談到session,就很容易讓人產生乙個誤區,那就是:是不是我開乙個頁面就有乙個會話?如果我關掉了與伺服器之間的會話(通常是以關掉瀏覽器的方式來實現)我的這個session就相應的不存在了?是不是有了session,服務端就知道我在幹什麼(因為只有這樣他才知道我想要什麼)?

由於日常的習慣和一些慣性思維,就很容易涉入這些誤區。其實事實並非如此。

在b/s(瀏覽器/伺服器)體系裡面,實現服務端與客戶端通訊的,的確是採取乙個使用者乙個session的方式,使用者通過在瀏覽器端的一些動作來達到與伺服器的「交流」,似乎伺服器能知道我在做什麼似的。其實不然。我們的瀏覽器大多數都是支援w3c標準的,http協議都是以無狀態的形式存在,而服務端是時刻都在「活動」,真正實現瀏覽器與服務端通訊的其實是請求的提交。服務端則根據請求url的不同響應不同的內容。也就是說,如果瀏覽器沒有發出請求,服務端是不知道使用者在做什麼的。session是駐留在服務端記憶體當中的,記錄了客戶端的一些基本資訊。

那麼瀏覽器是怎麼知道我的這個session的呢?當使用者向服務端提交乙個請求之後,服務會自動為它分配乙個唯一的session標示id。然後通過response響應到使用者的瀏覽器,在儲存在使用者瀏覽器的cookie中,只要使用者開啟網頁的方式是採取window.open的方式,而不是,直接開啟新的瀏覽器,他的這個session id是多頁面共用的。當然,有很多瀏覽器的cookie為了考慮安全性而禁掉。雖然有的瀏覽器會自動去開,但是並不是全部。為了考慮更好的相容性,可以將這個session的id採取在url後面加上?jsessionid的方式帶上,這樣就確保了使用者會話的流暢性。

那麼,當使用者關掉所有的瀏覽器之後,是不是這個session會話就會銷毀呢?

同理,一旦物件或者資料儲存在此session中,只要這個session的id不失去,就可以在應用**中通過request來獲取這個session,如果有不法之徒採取這種方式,那麼就會顯得不安全了,這就是為什麼一些保密性要求比較高的**會盡快的去銷毀session的原因。

在servlet、自定義標籤中都可以根據request物件來獲得session,有了session就可以將處理出來的資料進行儲存、獲取等各種方便開發的動作了。有點值得注意的就是此處需要用httpservletrequest物件通過getsession()的方法來獲得session了。有了session的幫忙,自定義標籤可以寫的更具有通用性、擴充套件性。標籤體組裝資料,然後通過session來儲存使用者的這些資料,讓開發更自由。

在使用者傳送請求的時候,通常會在服務端先過濾一下。常用的方式是採取filter過濾器過濾,在filter中也可以通過request請求來獲得session。例如在許可權過濾中有一種方式就是當使用者登入之後,將使用者的一些狀態儲存在此使用者的session中,例如一些使用者可以訪問的資源等。這樣就可以利用session讓每次使用者訪問的時候都可以在filter中對使用者許可權進行過濾。

總之,我的見解就是,session的失去不等於銷毀、session的存在是伺服器、session的標示是id、session的作用很大、session不應該被誤解!

關於session的使用

在j2ee的開發與之用中,session所起到的作用是有目共睹的。它所能方便我們與伺服器之間進行會話,就好像人與人之間交流一樣。乙個會話用乙個session來表示,這樣就可以保證伺服器不會被忙暈了。談到session,就很容易讓人產生乙個誤區,那就是 是不是我開乙個頁面就有乙個會話?如果我關掉了與伺...

關於session的理解

session用於儲存有關使用者 客戶端 瀏覽器 會話的資訊。session 變數儲存的資訊是單一使用者的,並且可 用程式中的所有頁面使用。使用者開啟瀏覽器訪問 瀏覽器的cookie中會生成sessionid,在每次請求時都會自動帶上sessionid,然後伺服器端根據sessionid找到對應的s...

關於session校驗在專案中的使用

1.自己定義乙個類繼承ihttpmodule介面,實現裡邊的init方法,在這個方法中給請求管道的第9個事件 acquirerequeststate 註冊乙個方法在這個方法中完成,注意不要忘記web.config中完成註冊.httpmodeules 解釋一下這句話的意思。2 自己定義乙個類繼承sys...