SessionStateStoreProviderBase 類別

定義

為資料存放區定義工作階段狀態提供者的所需成員。

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
繼承
SessionStateStoreProviderBase

範例

如需會話狀態存放區提供者實作的範例,請參閱 實作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如果物件在呼叫 GetItemExclusiveGetItem 方法期間遇到鎖定的會話資料,它會以半秒間隔重新要求會話資料,直到釋放鎖定或會話資料鎖定的時間量超過 屬性的值 ExecutionTimeout 為止。 如果超過執行時間, SessionStateModule 物件會呼叫 ReleaseItemExclusive 方法來釋放會話存放區資料,並在該時間要求會話存放區資料。

由於已鎖定的會話存放區資料可能已由 ReleaseItemExclusive 呼叫個別執行緒上的 方法釋放,所以在呼叫 SetAndReleaseItemExclusive 目前回應的方法之前,可能會嘗試設定並釋放已由另一個會話釋放和修改的會話狀態存放區資料。 為了避免這種情況, GetItemGetItemExclusive 方法會傳回鎖定識別碼。 每個要求都必須包含此鎖定識別碼,才能修改鎖定的會話存放區資料。 只有在資料存放區中的鎖定識別碼符合 所提供的 SessionStateModule 鎖定識別碼時,才會修改會話存放區資料。

刪除過期的會話存放區資料

Abandon針對特定會話呼叫 方法時,該會話的資料會使用 RemoveItem 方法從資料存放區中刪除;否則,資料會保留在會話資料存放區中,以供伺服器未來要求會話。 實作 SessionStateStoreProviderBase 是刪除過期的會話資料。

建構函式

SessionStateStoreProviderBase()

初始化 SessionStateStoreProviderBase 類別的新執行個體。

屬性

Description

取得簡短、易讀的描述,適合顯示在管理工具或其他使用者介面 (UI) 中。

(繼承來源 ProviderBase)
Name

取得用來在設定期間代表提供者的易記名稱。

(繼承來源 ProviderBase)

方法

CreateNewStoreData(HttpContext, Int32)

建立要用於目前要求的新 SessionStateStoreData 物件。

CreateUninitializedItem(HttpContext, String, Int32)

將新的工作階段狀態項目加入資料存放區。

Dispose()

釋放 SessionStateStoreProviderBase 實作所使用的所有資源。

EndRequest(HttpContext)

SessionStateModule 物件在要求結束時呼叫。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetItem(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

從工作階段資料存放區傳回唯讀工作階段狀態資料。

GetItemExclusive(HttpContext, String, Boolean, TimeSpan, Object, SessionStateActions)

從工作階段資料存放區傳回唯讀工作階段狀態資料。

GetType()

取得目前執行個體的 Type

(繼承來源 Object)
Initialize(String, NameValueCollection)

初始化設定產生器。

(繼承來源 ProviderBase)
InitializeRequest(HttpContext)

SessionStateModule 物件為每一要求初始化呼叫。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ReleaseItemExclusive(HttpContext, String, Object)

釋放工作階段資料存放區中項目的鎖定。

RemoveItem(HttpContext, String, Object, SessionStateStoreData)

刪除工作階段資料存放區的項目資料。

ResetItemTimeout(HttpContext, String)

更新工作階段資料存放區中項目的到期日與時間。

SetAndReleaseItemExclusive(HttpContext, String, SessionStateStoreData, Object, Boolean)

使用目前要求的值,更新工作階段狀態資料存放區中的工作階段項目資訊,並清除對資料的鎖定。

SetItemExpireCallback(SessionStateItemExpireCallback)

為定義於 Global.asax 檔案之 Session_OnEnd 事件,設定 SessionStateItemExpireCallback 委派 (Delegate) 的參考。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於

另請參閱