会话状态。如何使用自定义模式管理会话?

时间:2010-01-03 11:32:50

标签: asp.net database session session-state sessionid

我正在网站上工作,这是我的第一个网络项目。

会话场景

我为我的项目创建了一个安全级别有点高的数据库。我想为每个登录我网站的用户管理会话。会话状态可以使用Cookie和URL,一次只能使用一个。

现在我接管了所有四种会话状态模式。 即 1. InProc 2.状态服务器3. Sql Server 4.自定义

现在,在审核了所有这些模式后,我很困惑,我应该使用Sql Server或Custom。

基本上我想将会话相关信息存储在我自己的数据库中,而不是Aspnet_db,这是microsoft提供的默认数据库。我创建了所有与登录和注册相关的表。但我不知道如何将会话存储到我的数据库中。 我需要创建哪些表以便维护到数据库中。

我想在我的数据库中创建一个完整的会话和登录相关信息日志(至少持续1年)。 我想使用machinekey作为AES和SHA1。

<sessionState mode="Custom" cookieless="AutoDetect" timeout="15" regenerateExpiredSessionId="true" stateNetworkTimeout="10" >
    </sessionState>
    <machineKey decryption="AES" 
                validation="SHA1"  
                decryptionKey="7E047D50A7E430181CCAF7E0D1771330D15D8A58AEDB8A1158F97EEF59BEB45D" 
                validationKey="68B439A210151231F3DBB3F3985E220CFEFC0662196B301B84105807E3AD27B6475DFC8BB546EC69421F38C1204ACFF7914188B5003C1DCF3E903E01A03C8578"/>

<add name="conString" connectionString="Data Source=192.168.1.5; Initial Catalog=dbName; Integrated Security=True;" providerName="System.Data.SqlClient" />

我需要在webconfig中指定所有内容吗?

我的数据源= 192.168.1.5 数据库名称= db.mdf

我需要了解的

  1. 我需要添加哪些表格 数据库存储会话相关 信息。例如。会话ID(任何 其他字段也存储或不存储), 会话时间,会话开始时间, 会话结束时间,会话过期 时间。我什么都不知道 通常被带走。
  2. 我是否需要加密会话ID 在存储到数据库之前。如果是的话
  3. 加密将是自动的,或者我需要编写一些代码来执行此操作,而不是我在上面的Web配置中编写的。

    1. 如何使用mode ='custom' 使用我的数据库进行web配置。
    2. 以下代码

      <sessionState mode="Custom" cookieless="AutoDetect" timeout="15" regenerateExpiredSessionId="true" stateNetworkTimeout="10" > 
      </sessionState> 
      

2 个答案:

答案 0 :(得分:2)

如果您正在使用SQL Server会话提供程序,则应运行aspnet_regsql以创建所需的表:

aspnet_regsql –E -S localhost –ssadd –sstype p

(如果您使用的是SQL Express,则将localhost替换为。\ SQLEXPRESS)

如果您不希望命令创建aspnetdb数据库,还可以使用-d标志指定自定义数据库名称。您也可以运行不带标志的命令来使用向导模式。

如果要构建自定义会话提供程序(不是一个小任务),您可以从查看上面命令运行的脚本开始:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallPersistSqlState.sql

虽然这取决于您的要求,但通常会话状态的加密不会增加太多价值。但是,如果您的数据特别敏感,那么可能值得考虑。但请注意,会话状态的最大风险通常不在数据库端,而是在客户端,一个用户可以通过访问其会话cookie来窃取另一个用户的会话。因此,在我使用数据库端加密之前,我至少会对引用会话cookie的所有页面使用SSL。

如果有帮助,我会在本书中介绍自定义会话状态的许多方面,尽管我没有展示完整的自定义提供程序:Ultra-Fast ASP.NET

答案 1 :(得分:0)

问题集1:

  1. 取决于您如何实施提供商。 MSDN会告诉你如何做到这一点。
  2. 我会说不,但我不是安全专家。
  3. 设置2:

    1. 你是什么意思?