上一文章中有具体描述到SessionState的几种模式的优点与缺点,现在我们挑一个持久性的SQLServer模式来做一个实例,让大家有个细节印象。
SQLServer 模式配置步骤
- 在运行将要存储会话状态的 SQL Server 的计算机上运行 InstallSqlState.sql。 默认情况下,InstallSqlState.sql 位于 %SystemRoot%Microsoft.NETFrameworkversion 中。 这将创建一个具有新存储过程的名为 ASPState 的数据库,并在 TempDB 数据库中创建名为 ASPStateTempApplications 和 ASPStateTempSessions 的表。
- 在应用程序的 Web.config 文件中,将
mode
设置为"SQLServer"
,并将sqlConnectionString
设置为诸如"data source=localhost;Integrated Security=SSPI;"
这样的值。
SQLServer 模式配置实操
1、打开VS命令行,运行以下命令配置状态数据库
aspnet_regsql.exe -ssadd -sstype c -d <Database Name> -S <SQL Server IP> -U <User Name> -P <Password>
此时查看SQLServer会发现增加了数据库ASPState,但是没有表。
2、运行以下命令配置持久性表,aspnet_regsql.exe -ssadd -sstype p -S <SQL Server IP> -U <User Name> -P <Password>
该命令对此应用进行了持久化操作。这时会看到ASPState数据库里面多了两张表,ASPStateTempSession就可以用来保存Session。
同时,Agent中,会增加了一个自动删除过期数据的JOB,每一分钟会执行一次,其实过期的控制就在于这个JOB中。
3、Web.Config增加配置节点
4、我们做一个实际例子来测试一下,需要实例源码的可以留言邮箱地址,现在我们看看例子的截图与原理
Show The Code:
页面请求结果:(先提交,再停止整个站点,再启动站点,最后还原Session),结果 ,你会发现,Session信息仍然有效。
我们检查一下页面的Cookie信息,可以看到,SessionId在客户端存储了起来,与数据表中的SessionId对应起来。
配置参数细节可参考微软官方文档:
https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-2.0/h6bb9cz9(v=vs.80)
到现在为止,我们基本测试完Sql'Server State 的情况,这种方式虽然可以持久性存储并还原Session信息,解决了基本需求。但应对大用户量的访问时,这类频繁访问数据库的方式,性能缺点也是个瓶颈。