1

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

会话场景

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

现在我回顾了所有四种会话状态模式。即 1. InProc 2. State Server 3. Sql Server 4. Custom

现在,在回顾了所有这些模式之后,我很困惑我应该使用 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' 用于 Web 配置。

在以下代码中

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

2 回答 2

3

如果您使用的是 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

于 2010-01-03T22:11:20.137 回答
-1

问题集 1:

  1. 取决于你如何实现你的提供者。MSDN会告诉你如何做到这一点。
  2. 我会说不,但我不是安全专家。

第 2 组:

  1. 你什么意思?
于 2010-01-03T12:56:17.090 回答