.NET Framework 4
其他版本
评价此主题

 

描述了自定义的会话状态存储提供程序实现,该实现使用 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();

当请求您的应用程序时,ASP.NET 将对该提供程序进行编译。

下面的命令演示在将代码示例复制到 Visual Basic 的 OdbcSessionStateStore.vb 文件和 C# 的 OdbcSessionStateStore.cs 文件中之后如何使用命令行编译器编译示例提供程序。

 
csc /out:OdbcSessionStateStore.dll /t:library OdbcSessionStateStore.cs /r:System.Web.dll /r:System.Configuration.dll

若要使用示例提供程序,您需要创建“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>

相关文章: