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 应用程序不共享会话数据。

可以通过将配置元素customProviderCustomsessionState 属性设置为 ,将 属性设置为 mode 自定义提供程序的名称,为 ASP.NET 应用程序指定SessionStateStoreProviderBase自定义实现,如本主题的示例所示。

锁定会话存储数据

由于 ASP.NET 应用程序是多线程应用程序以支持响应并发请求,因此并发请求可能会尝试访问相同的会话信息。 假设帧集中的多个帧都访问同一个应用程序。 帧集中每个帧的单独请求可以在 Web 服务器上在不同线程上并发执行。 如果每个帧源访问会话状态变量 ASP.NET 页,则可以有多个线程同时访问会话存储。

为了避免会话存储中的数据冲突和意外的会话状态行为, SessionStateModuleSessionStateStoreProviderBase 类包括锁定功能,该功能在执行 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 委托的引用。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅