1. 程式人生 > >關於Session的使用和優化

關於Session的使用和優化

優點

  如果要在諸多Web頁間傳遞一個變數,那麼用Session變數要比通過QueryString傳遞變數可使問題簡化。
  要使WEb站點具有使用者化,可以考慮使用Session變數。你的站點的每位訪問者都有使用者化的經驗,基於此,隨著LDAP和諸如MS Site Server等的使用,已不必再將所有使用者化過程置入Session變量了,而這個使用者化是取決於使用者喜好的。

  你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放。
缺點
  Session變數和cookies是同一型別的。如果某使用者將瀏覽器設定為不相容任何cookie,那麼該使用者就無法使用這個Session變數!
  當一個使用者訪問某頁面

時,每個Session變數的執行環境便自動生成,這些Session變數可在使用者離開該頁面後仍保留20分鐘!(事實上,這些變數一直可保留至“timeout”。“timeout”的時間長短由Web伺服器管理員設定。一些站點上的變數僅維持了3分鐘,一些則為10分鐘,還有一些則保留至預設值20分鐘。)所以,如果在Session中置入了較大的物件(如ADO recordsets,connections, 等等),那就有麻煩了!隨著站點訪問量的增大,伺服器將會因此而無法正常執行!
  因為建立Session變數有很大的隨意性,可隨時呼叫,不需要開發者做精確地處理,所以,過度使用session變數將會導致程式碼
不可讀而且不好維護。
  雖然“你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放”。但是,“誰”想到那兒呢?變數的含義是什麼?這些都變得不很清晰。
*********************************************************************************************************************************************************************
Session使用的優化

ASP.NET 裡面 SessionState有三種可以選擇的模式   

方式
說明
優點
缺點
InProc
會話值在aspnet_wp.exe 或 w3wp.exe的記憶體中保持為活動物件。這是預設選項。
效能最好
當W3WP 程序
死掉
或者程序回收後,Session資訊將會丟失。

佔用Web 伺服器的記憶體用於儲存Session資訊

StateServer
會話值被序列化並存儲在單獨程序 (aspnet_state.exe) 的記憶體中。該程序還可以在其他計算機上執行。
在負載均衡條件下,可以為多個Web 伺服器維護Session資訊

當W3WP 程序
死掉
或者程序回收後,Session資訊不會丟失

效能比InProc方式差
SQL Server
會話值被序列化並存儲在 SQL Server 表中。SQL Server 的例項可以在本地執行,也可以遠端執行
在負載均衡條件下,為多個Web 伺服器維護Session資訊

當W3WP 程序
死掉
或者程序回收後,Session資訊不會丟失

當Web伺服器宕機或者重新啟動後,Session資訊不會丟失.

效能比InProc方式差
預設情況下
每個頁面需要操作兩次SQL Server 資料庫操作。第一次讀取Session,第二次寫入Session.
  •   頁面的EnableSessionState開關


有很多頁面裡面只需要從Session裡面讀取資料的而不需要寫入資料到Session, 對於這些頁面我們可以將頁面標記為<%@ Page EnableSessi . . .%>。這樣可以將頁面執行時對SQL Server 資料庫操作由兩次減少為一次。
對於不需要使用Session的頁面,我們可以將頁面標記為<%@ Page EnableSessi . . .%>。

  • 減少Session 裡面存放的資料量

由於Web Server 與存放Session的StateServer之間是通過網路來進行通訊的,而且在預設情況每個頁面需從StateServer裡面讀取一次Session資料,寫入一次Session資料。通過減少Session裡面存放的資料能夠使系統的效能獲得提高。