Introduction:
通过把会话数据保存在SQL Server数据库中,也可以在进程外来管理会话状态。这个方法的优势在于可以把多台数据库服务器做成集群,以便在其中某台服务器出问题时,另外一台数据库服务器可以接管状态管理
Step1
加载C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\installsqlstate.sql
执行脚本后会生成ASPState数据库,在tempdb中也会生成两张表
dbo.ASPStateTempSessions,ASPStateTempApplications
Step2
在web.config
修改sessionstate配置项
<sessionState
mode="SQLServer"//我们一般使用InProc mode
sqlConnectionString="data source=127.0.0.1;UID=sa;PWD=secret"
/>
mode="SQLServer"//我们一般使用InProc mode
sqlConnectionString="data source=127.0.0.1;UID=sa;PWD=secret"
/>
Step3
重启SQL Server服务,开启SQL Server Agent
在执行installsqlstate.sql脚本时会创建一个job,Agent会自动帮我们清理过期的session
再我们在代码中使用session时
如:Session[“test”] = “test”;
会在tempdb中的ASPStateTempSessions表产生一笔数据
如图:
我写了个试验
if(Session["test"] != null)
str = Session["test"].ToString();
if (! IsPostBack )
{
Session["test"] = "test";
}
str = Session["test"].ToString();
if (! IsPostBack )
{
Session["test"] = "test";
}
当把ASPStateTempSessions中的数据删除时,就无法访问Session[“test”]中的值了
这种在进程外管理session的方法提高了我们对session的控制,为我们提供了另一种思路,很不错
参考书目:
ASP.Net Unleashed 2nd