【问题标题】:Session state. How to manage session with custom mode?会话状态。如何使用自定义模式管理会话?
【发布时间】:2010-12-31 23:15:52
【问题描述】:

我正在开发一个网站,这是我的第一个网络项目。

会话场景

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

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

现在在回顾了所有这些模式之后,我很困惑我应该使用 Sql Server 还是自定义。

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

我想在我的数据库中创建一个完整的会话日志和登录相关信息(至少持续 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 在存储到数据库之前。如果是

加密将是自动的,或者我是否需要编写一些代码来执行此操作,而不是我在上面的 Web 配置中编写的代码。

  1. mode='custom' 将如何用于 使用我的数据库进行网络配置。

在下面的代码中

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

【问题讨论】:

  • 使用这个:&lt;sessionState mode="SQLServer" timeout="50" allowCustomSqlDatabase="true" sqlConnectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=MyCustomStateDb"/&gt; &lt;compilation debug="false"&gt;

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


【解决方案1】:

如果您使用的是 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 来窃取另一个用户的会话。因此,在我在 DB 端使用加密之前,我至少会对所有引用会话 cookie 的页面使用 SSL。

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

【讨论】:

    【解决方案2】:

    问题集 1:

    1. 取决于您实现提供程序的方式。 MSDN 会告诉你怎么做。
    2. 我会说不,但我不是安全专家。

    第 2 组:

    1. 什么意思?

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 2016-06-29
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多