描述了自定义的会话状态存储提供程序实现,该实现使用 ODBC .NET Framework 数据提供程序来管理 Access 数据库中的会话信息。
System.Data.Odbc 类并通过 Access 数据库来存储和检索会话信息。
此主题描述了有关示例会话状态存储提供程序的实现详细信息,还描述了如何生成示例并配置 ASP.NET 应用程序以使用示例提供程序。
如何:演示会话状态存储提供程序 主题中找到。
若要创建供示例提供程序使用的 Access 表,应在新的或现有的 Access 数据库中发出以下的数据定义查询。
CREATE TABLE Sessions
(
SessionId Text(80) NOT NULL,
ApplicationName Text(255) NOT NULL,
Created DateTime NOT NULL,
Expires DateTime NOT NULL,
LockDate DateTime NOT NULL,
LockId Integer NOT NULL,
Timeout Integer NOT NULL,
Locked YesNo NOT NULL,
SessionItems Memo,
Flags Integer NOT NULL,
CONSTRAINT PKSessions PRIMARY KEY (SessionId, ApplicationName)
)
这是一种安全措施,用来避免在 ASP.NET 应用程序中公开有关数据源的私有信息.
Source 属性值。在 ASP.NET 应用程序能够成功写入应用程序事件日志之前,需要创建下面的注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcSessionStateStore
false。
Session_OnEnd 事件不受支持。
建议您使用下面的代码定期删除数据存储区中过期的会话信息。
string commandString = "DELETE FROM Sessions WHERE Expires < ?"; OdbcConnection conn = new OdbcConnection(connectionString); OdbcCommand cmd = new OdbcCommand(commandString, conn); cmd.Parameters.Add("@Expires", OdbcType.DateTime).Value = DateTime.Now; conn.Open(); cmd.ExecuteNonQuery(); conn.Close();
若要使用示例提供程序,您需要创建“SessionState”系统 DSN,或提供到您的数据库的有效 ODBC 连接字符串。
此示例配置假设您的网站设置为使用 Forms 身份验证,并包括允许用户登录的名为 login.aspx 的 ASP.NET 页面。
<configuration>
<connectionStrings>
<add name="OdbcSessionServices" connectionString="DSN=SessionState;" />
</connectionStrings>
<system.web>
<sessionState
cookieless="true"
regenerateExpiredSessionId="true"
mode="Custom"
customProvider="OdbcSessionProvider">
<providers>
<add name="OdbcSessionProvider"
type="Samples.AspNet.Session.OdbcSessionStateStore"
connectionStringName="OdbcSessionServices"
writeExceptionsToEventLog="false" />
</providers>
</sessionState>
</system.web>
</configuration>