共用方式為


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)

適用於

另請參閱