ASP.NET Session 数据库存储
目录:
通过使用 Aspnet_regsql.exe 工具,将 ASP.NET Session 状态存储在 SQL Server 数据库中。
Session
至于为什么要将 Session 存入数据库中,那还要从 Session 存储的几个选择谈起。
选择(1)Session 默认存储在 ASP.NET 进程的内存中。
优点:应用程序对 Session 易于操作,速度更快(相对数据库而言)。
缺点:容易丢失,并且增加内存消耗。例如,更新 dll 文件等,涉及需要重启站点时,Session 状态便会丢失,用户需要重新登录。
选择(2)将 Session 存储在一个单独进程内存中。
优点:同上。
缺点:依然存在丢失 Session 的风险。
选择(3)将 Session 存储在一台单独运行的服务器内存中。
优点:同上。
缺点:虽然更加稳妥了,但内存的消耗,将成为最大的顾虑。
选择(4)将 Session 存储在数据库中。
优点:对 Session 状态能够持久存储,且易于扩展(例如多站共享 Session)。
缺点:应用程序对 Session 操作速度慢(相对内存而言),需要单独开启 SQL Server 数据库服务和代理服务。
总结:没有最优选择,只有最适合的选择。只要程序设计合理,符合应用场景,即为最优选择。
Session 数据库存储
在 Microsoft 官方文档中,对 Aspnet_regsql.exe 工具有详细介绍,在本文不再展开,传送门如下。
ASP.NET SQL Server Registration Tool (Aspnet_regsql.exe)
Aspnet_regsql.exe 安装在 Microsoft.NET Framework 目录中。如果计算机并行运行多个 .NET Framework 版本,则可能会安装该工具的多个版本。下表列出了针对 .NET Framework 不同版本的工具的安装位置。
.NET Framework 版本 | Aspnet_regsql.exe 文件的位置 |
---|---|
.NET Framework 版本 2.0 / 3.0 / 3.5 (32位系统) | %windir%\Microsoft.NET\Framework\v2.0.50727 |
.NET Framework 版本 2.0 / 3.0 / 3.5 (64位系统) | %windir%\Microsoft.NET\Framework64\v2.0.50727 |
.NET Framework 版本 4 (32位系统) | %windir%\Microsoft.NET\Framework\v4.0.30319 |
.NET Framework 版本 4 (64位系统) | %windir%\Microsoft.NET\Framework64\v4.0.30319 |
创建数据库和代理作业
使用 Aspnet_regsql.exe 工具执行下面命令:
aspnet_regsql.exe -S 192.168.1.195 -U sa -P 123456 -d SessionDB -ssadd -sstype c
选项 | 描述 |
---|---|
-S |
已安装 SQL Server 的服务器 IP 地址或服务名称。 |
-U |
用于登录的 SQL Server 用户 ID 。 |
-P |
用于登录的 SQL Server 密码。 |
-d |
指定将要创建或修改的数据库名称。如果未指定数据库,则使用默认数据库名称 aspnetdb 。 |
-ssadd |
添加 SQL Server 对 Session 状态的支持。 |
-sstype |
指定要使用的会话状态的类型,一共有三种选项。 |
-sstype
3 种会话状态的类型:
-sstype t
选项t
表示,临时存储。会话状态数据存储在 SQL Server tempdb 数据库中。SQL Server ASPState 数据库中安装了用于管理会话状态的存储过程。如果重新启动 SQL ,数据将不会保留。这是默认值。-sstype p
选项p
表示,持久化存储。会话状态数据和存储过程都存储在 SQL Server ASPState 数据库中。-sstype c
选项c
表示自定义存储。会话状态数据和存储过程都存储在自定义数据库中。必须使用-d
选项指定数据库名称。
执行过程:
Microsoft Windows [版本 10.0.18363.1049]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\WINDOWS\system32>cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regsql.exe -S 192.168.1.195 -U sa -P 123456 -d SessionDB -ssadd -sstype c
Microsoft (R) ASP.NET SQL 注册工具版本 4.8.3752.0
用于在 SQL Server 上安装和卸载 ASP.NET 功能的管理实用工具。
版权所有(C) Microsoft Corporation。保留所有权利。
开始添加会话状态。
........
已完成。
若要在 Web 应用程序中使用此自定义会话状态数据库,请在配置文件中使用 <system.web>\<sessionState> 节中的“allowCustomSqlDatabase”和“sqlConnectionString”特性,进行相应的指定。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>
Web.config 设置
<sessionState
cookieName="mycookie"
mode="SQLServer"
allowCustomSqlDatabase="true"
sqlConnectionString="server=127.0.0.1;uid=sa;pwd=123456;database=SessionDB;"
timeout="60"
cookieless="false"
/>
另外多说一点,如果想要做跨域共享 Session (在主站登录后,其他子站点共享登录状态),可以看看怎么修改 SessionDB 数据库中的 2 张表,一张表是用来记录站点信息,另一张记录 Session 状态的,在执行插入 Session 状态的存储过程中可修改。代理作业,用来定时执行删除过期 Session 记录的。
(完)