我正在网站上工作,这是我的第一个网络项目。
会话场景
我为我的项目创建了一个安全级别有点高的数据库。我想为每个登录我网站的用户管理会话。会话状态可以使用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
我需要了解的
加密将是自动的,或者我需要编写一些代码来执行此操作,而不是我在上面的Web配置中编写的。
以下代码
<sessionState mode="Custom" cookieless="AutoDetect" timeout="15" regenerateExpiredSessionId="true" stateNetworkTimeout="10" >
</sessionState>
答案 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:
设置2: