SessionStateStoreProviderBase 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
為資料存放區定義工作階段狀態提供者的所需成員。
public ref class SessionStateStoreProviderBase abstract : System::Configuration::Provider::ProviderBase
public abstract class SessionStateStoreProviderBase : System.Configuration.Provider.ProviderBase
type SessionStateStoreProviderBase = class
inherit ProviderBase
Public MustInherit Class SessionStateStoreProviderBase
Inherits ProviderBase
- 繼承
範例
如需會話狀態存放區提供者實作的範例,請參閱 實作 Session-State 存放區提供者。
下列程式代碼範例顯示設定為使用自定義工作階段狀態存放區提供者之 ASP.NET 應用程式的 Web.config 檔案。
<configuration>
<connectionStrings>
<add name="OdbcSessionServices" connectionString="DSN=SessionState;" />
</connectionStrings>
<system.web>
<sessionState
mode="Custom"
customProvider="OdbcSessionProvider">
<providers>
<add name="OdbcSessionProvider"
type="Samples.AspNet.Session.OdbcSessionStateStore"
connectionStringName="OdbcSessionServices" />
</providers>
</sessionState>
</system.web>
</configuration>
備註
ASP.NET 工作階段狀態會使用工作階段狀態存放區提供者,讀取和寫入工作階段資料至資料存放區。 會話狀態存放區提供者是繼承抽象類的 SessionStateStoreProviderBase 類別,並使用數據存放區特有的實作覆寫其成員。 會話狀態存放區提供者是由 類別在處理 ASP.NET 頁面期間呼叫 SessionStateModule ,以便與數據存放區通訊,以便儲存和擷取會話變數和相關會話資訊,例如逾時值。
每個 ASP.NET 應用程式內的會話數據會針對每個 SessionID 屬性個別儲存。 ASP.NET 應用程式不會共享工作階段資料。
您可以將組態專案的 Custom 屬性sessionState
設定為 ,並將 customProvider
屬性設定mode
為自定義提供者的名稱,以指定 ASP.NET 應用程式的自定義SessionStateStoreProviderBase實作,如本主題的範例所示。
鎖定會話存放區數據
因為 ASP.NET 應用程式多線程支援回應並行要求,所以並行要求可能會嘗試存取相同的會話資訊。 假設框架集中有多個畫面格都存取相同的應用程式。 框架集中每個框架的個別要求可以在不同線程的 Web 伺服器上同時執行。 如果每個畫面來源存取會話狀態變數的 ASP.NET 頁,則您可以有多個線程同時存取會話存放區。
為了避免會話存放區發生數據衝突和非預期的會話狀態行為,和 SessionStateStoreProviderBase 類別包含鎖定功能,SessionStateModule可在執行 ASP.NET 頁面期間,獨佔鎖定特定會話的會話存放區專案。 請注意,即使 EnableSessionState 屬性標示為 ReadOnly
,相同應用程式中的其他 ASP.NET 頁面仍可寫入會話存放區,因此,來自存放區的只讀會話數據要求可能仍然會等待鎖定的數據釋放。
在呼叫 GetItemExclusive 方法時,會在要求開頭的會話存放區數據上設定鎖定。 當要求完成時,會在呼叫 SetAndReleaseItemExclusive 方法期間釋放鎖定。
SessionStateModule如果 物件在呼叫 GetItemExclusive 或 GetItem 方法期間遇到鎖定的會話數據,它會以半秒間隔重新要求會話數據,直到釋放鎖定或會話數據鎖定的時間量超過 屬性的值ExecutionTimeout為止。 如果超過運行時間,物件 SessionStateModule 會呼叫 ReleaseItemExclusive 方法來釋放會話存放區數據,並在該時間要求會話存放區數據。
由於鎖定的會話存放區數據可能已由 ReleaseItemExclusive 呼叫個別線程上的 方法釋放,再呼叫 SetAndReleaseItemExclusive 目前回應的方法,因此可能會嘗試設定和釋放已由另一個會話釋放和修改的會話狀態存放區數據。 為了避免這種情況, GetItem 和 GetItemExclusive 方法會傳回鎖定標識符。 每個要求都必須包含此鎖定標識符,才能修改鎖定的會話存放區數據。 只有在數據存放區中的鎖定標識符符合 所提供的 SessionStateModule鎖定標識符時,才會修改會話存放區數據。
刪除過期的會話存放區數據
Abandon針對特定會話呼叫 方法時,會使用 RemoveItem 方法從數據存放區中刪除該會話的數據;否則,數據會保留在會話數據存放區中,以伺服器未來對會話的要求。 實作 SessionStateStoreProviderBase 最多可以刪除過期的會話數據。
建構函式
SessionStateStoreProviderBase() |
初始化 SessionStateStoreProviderBase 類別的新執行個體。 |
屬性
Description |
取得簡短、易讀的描述,適合顯示在管理工具或其他使用者介面 (UI) 中。 (繼承來源 ProviderBase) |
Name |
取得用來在設定期間代表提供者的易記名稱。 (繼承來源 ProviderBase) |