2011-08-28 97 views
2

我正在使用SQL服務器會話狀態。master頁面和aspx頁面中的sql服務器會話

如果我使用的呼喚存儲在會話中的幾個變量,母版頁,然後再在後面的ASPX代碼以後使用會話,這是否觸發:

一)2數據庫中讀取,1在母版頁進程期間和第二次在aspx運行時。

b)1數據庫讀取,會話在母版頁過程中加載並在頁面的生命週期中持續存在。

謝謝。

回答

3

主頁面是連接到頁面的用戶控件,並按此處理。因此,這個問題不僅適用於母版頁,而且適用於附加到頁面的所有用戶控件,自定義控件和標準控件。

根據請求,SQL Server存儲的會話狀態將被串行化/反序列化到SQL Server中或從SQL Server中反序列化。這不是變量的請求,而是HTTP請求本身。

在頁面生命週期中,值將在AcquireRequestState事件中檢索,並推送到ReleaseRequesteState中。這些事件是HttpModule系統的各個方面,並且由Page類繼承。

因此,要回答您的問題,只需在頁面生命週期開始時(INIT前)向SQL Server發送一個調用即可獲取整組會話變量,而不管Session中有多少個變量州。然後在頁面生命週期結束時(這是在RENDER & UNLOAD之後)還有第二個數據庫調用來存儲會話狀態

+0

喔,順便說一句,如果我是觸發前的請求連撞ASPX一個HTTP模塊中使用這個會話,並請求1 = 1屆的原則讀取仍持有? – frenchie

+0

是的。 AcquireRequestState和ReleaseRequestState事件實際發生在HTTP模塊級別。 –

+0

好吧,酷,那麼就像一個魅力! – frenchie

2

讀取結果只有1,會話對象從請求開始。

當頁面將數據保存到Session時,該值將加載到由HttpSessionState類承載的定製字典類中。當正在進行的請求完成時,字典的內容被刷新到狀態提供程序。如果會話狀態是空的,因爲沒有數據被編程放在字典裏,沒有數據序列化到存儲介質,更重要的是,沒有插槽無論是在ASP.NET緩存,SQL Server或NT狀態服務創建跟蹤當前會話。這是出於性能方面的考慮這樣做,但對其中的會話ID的處理方式的關鍵反響:爲每個請求生成一個新的會話ID,直到一些數據被存儲在會話字典。 - 看到http://msdn.microsoft.com/en-us/library/aa479041.aspx更多細節