描述自定义会话状态存储提供程序实现,并演示示例提供程序实现。
另一个方法是将会话数据存储在 SQL Server 数据库中,这种情况下会话数据可由多个 Web 服务器共享。
由于下列原因,您可以创建自定义会话状态存储提供程序:
-
需要将会话状态信息存储在 SQL Server 以外的数据源中,如 FoxPro 数据库或 Oracle 数据库。
-
例如,使用预定义架构存储在现有 SQL Server 数据库中的购物车数据。
有关更多信息,请参见本主题后面的“必需的类”一节。
SessionStateStoreProviderBase 类的每个成员稍后将在本主题的“必需的类”一节中进行更详细的讨论。
ISessionIDManager 中的“备注”一节。
ASP.NET 模拟。
但是,同一应用程序中的其他 ASP.NET 页也许可以写入会话存储区,因此对存储区中只读会话数据的请求可能仍然必须等待锁定数据被释放。
SetAndReleaseItemExclusive 方法期间释放锁定。
ReleaseItemExclusive 方法来释放会话存储数据,然后立即请求该会话存储数据。
SessionStateModule 提供的锁定标识符匹配时,会话存储数据才能修改。
否则,这些数据将保留在会话数据存储区中,供以后对该会话的请求使用。
Session_OnEnd 事件的委托并在删除过期会话数据时引发该委托。
这使多个 ASP.NET 应用程序能够使用同一数据源而不会在出现重复的会话标识符时产生冲突。
例如,下面的命令可以用于从数据库检索会话数据。
SELECT * FROM Sessions WHERE SessionID = 'ABC123' AND ApplicationName = 'MyApplication'
或者,也可以将会话标识符和应用程序名称的组合存储为会话状态数据存储区中的项的唯一标识符。
会话状态存储提供程序示例。
必选 ProviderBase 成员
|
成员 |
说明 |
|---|---|
|
Initialize 方法 |
此方法用于设置提供程序实例的属性值,包括特定于实现的值和在配置文件(Machine.config 或 Web.config)中指定的选项。 |
必选 SessionStateStoreProvider 成员
|
成员 |
说明 |
|---|---|
|
InitializeRequest 方法 |
HttpContext 实例作为输入,并执行会话状态存储提供程序必需的所有初始化操作。 |
|
EndRequest 方法 |
HttpContext 实例作为输入,并执行会话状态存储提供程序必需的所有清理操作。 |
|
Dispose 方法 |
释放会话状态存储提供程序不再使用的所有资源。 |
|
GetItemExclusive 方法 |
SessionStateModule。 SessionStateStoreData 对象。 GetItemExclusive 方法。 actionFlags 参数设置为零。 out 参数之后应将数据存储区中的值设置为零。 |
|
GetItem 方法 |
ReadOnly 时调用。 |
|
SetAndReleaseItemExclusive 方法 |
SessionStateStoreData 对象、当前请求的锁定标识符以及指示要存储的数据是属于新会话还是现有会话的值作为输入。 SessionID 值和锁定标识符值匹配的当前应用程序的会话数据才会更新。 ResetItemTimeout 方法来更新会话项数据的过期日期和时间。 |
|
ReleaseItemExclusive 方法 |
此方法清除锁定,释放该被请求项以供其他请求使用。 |
|
RemoveItem 方法 |
Abandon 方法被调用时调用。 |
|
CreateUninitializedItem 方法 |
InitializeItem 的未初始化项。 SessionID 值。 SessionID 值的重定向请求被视为新的会话,而不会被误认为是对过期会话的请求。 Session_OnStart 事件。 |
|
CreateNewStoreData 方法 |
HttpStaticObjectsCollection 实例。 |
|
SetItemExpireCallback 方法 |
false。 |
会话状态存储提供程序示例。