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 应用程序不共享会话数据。
可以通过将配置元素customProvider
Custom的 sessionState
属性设置为 ,将 属性设置为 mode
自定义提供程序的名称,为 ASP.NET 应用程序指定SessionStateStoreProviderBase自定义实现,如本主题的示例所示。
锁定会话存储数据
由于 ASP.NET 应用程序是多线程应用程序以支持响应并发请求,因此并发请求可能会尝试访问相同的会话信息。 假设帧集中的多个帧都访问同一个应用程序。 帧集中每个帧的单独请求可以在 Web 服务器上在不同线程上并发执行。 如果每个帧源访问会话状态变量 ASP.NET 页,则可以有多个线程同时访问会话存储。
为了避免会话存储中的数据冲突和意外的会话状态行为, SessionStateModule 和 SessionStateStoreProviderBase 类包括锁定功能,该功能在执行 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) |