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 应用程序不共享会话数据。
可以通过将配置元素的属性sessionState设置为Custom自定义提供程序的名称,customProvider为 ASP.NET 应用程序mode指定自定义SessionStateStoreProviderBase实现,如本主题的示例所示。
锁定会话存储数据
由于 ASP.NET 应用程序经过多线程支持响应并发请求,因此并发请求可能会尝试访问同一会话信息。 假设帧集中有多个帧都访问同一应用程序。 帧集中每个帧的单独请求可以同时在不同的线程上在 Web 服务器上执行。 如果每个帧源访问会话状态变量的 ASP.NET 页,则可以有多个线程同时访问会话存储。
为了避免会话存储中的数据冲突和意外的会话状态行为,并且类SessionStateStoreProviderBase包括锁定功能,SessionStateModule该功能在执行 ASP.NET 页期间专门锁定特定会话的会话存储项。 请注意,即使该 EnableSessionState 属性被标记为 ReadOnly,同一应用程序中的其他 ASP.NET 页也可能能够写入会话存储,因此,对存储中只读会话数据的请求可能仍会等待锁定的数据释放。
在对方法的调用 GetItemExclusive 中,在请求开始时对会话存储数据设置锁。 请求完成后,在调用 SetAndReleaseItemExclusive 方法期间释放锁。
SessionStateModule如果在调用方法GetItemExclusiveGetItem期间对象遇到锁定的会话数据,它将以半秒间隔重新请求会话数据,直到释放锁定或会话数据锁定的时间超过属性的值ExecutionTimeout。 如果超出执行超时,该 SessionStateModule 对象将调用 ReleaseItemExclusive 该方法以释放会话存储数据,并请求该时间的会话存储数据。
由于锁定的会话存储数据可能是在调用当前响应的方法之前SetAndReleaseItemExclusive对单独线程上的方法的调用ReleaseItemExclusive释放的,因此可以尝试设置和释放已由另一个会话释放和修改的会话状态存储数据。 为了避免这种情况,和GetItemGetItemExclusive方法返回锁标识符。 此锁定标识符必须包含在每个请求中,以修改锁定的会话存储数据。 仅当数据存储中的锁标识符与提供的 SessionStateModule锁标识符匹配时,才会修改会话存储数据。
删除过期的会话存储数据
Abandon为特定会话调用该方法时,将使用该方法从数据存储RemoveItem中删除该会话的数据;否则,该数据将保留在会话数据存储中,供服务器将来请求会话。 删除过期的会话数据由 SessionStateStoreProviderBase 实现决定。
构造函数
| 名称 | 说明 |
|---|---|
| SessionStateStoreProviderBase() |
初始化 SessionStateStoreProviderBase 类的新实例。 |
属性
| 名称 | 说明 |
|---|---|
| Description |
获取适合在管理工具或其他用户界面(UI)中显示的简短友好说明。 (继承自 ProviderBase) |
| Name |
获取用于在配置期间引用提供程序的友好名称。 (继承自 ProviderBase) |