By MBPDLPayday Loans

保存Session到数据库中

上一次折腾这个是在05年,前两天又遇到webserver cluster session传递的问题了.当时还是.Net1.1时代,现在升级到2.0了,有些地方的配置也不尽相同,值得记录一把.

.Net 2.0对于InstallSqlState.sql和InstallPersistSqlState.sql不可以用查询分析器直接运行脚本, 取而代之的是必须用.Net2.0提供的一个工具–Aspnet_regsql.exe 更让我不能接受的是这个工具是.Net写的,这就意味着DB Server上必须有.Net2.0的环境才能玩.

[注]对于这个工具的使用,可以在MSDN上查到,或者/?看看帮助也能明白.
http://msdn2.microsoft.com/zh-cn/library/ms229862(vs.80).aspx

闲话少说,我们如果要安装State数据库在SQLServer上的话,命令行程序如下:
1.Aspnet_regsql.exe -S localhost -E -ssadd -sstype p //这样会安装一个ASPState数据库在localhost DB上, 且执行的是InstallPersistSqlState.sql脚本, 用户状态会保存在永久数据库中,不会随着重启DB Server儿丢失
2.Aspnet_regsql.exe -S localhost -E -ssadd -sstype p //同样会安装ASPState数据库出来,过程中执行的脚本是InstallSqlState.sql, 用户状态保存在TempDB中, 数据库服务器重启则用户状态丢失.

卸载该State数据库的参数是-ssremove, 不过好像执行Aspnet_regsql.exe可以调出UI, 用鼠标选选倒也能卸载

接下来是web.config里面的配置

1.system.web下的sessionState节点配置:
<sessionState mode=”SQLServer” sqlConnectionString=”Data Source=dbserver;User Id=uid;Password=pwd” cookieless=”false” timeout=”200″/>
2.system.web下的machineKey节点配置:
<machineKey validationKey=”3FF1E929BC0534930B0920A7B59FA698BD02DFE7″ decryptionKey=”280450BB36319B474C996B506A59AEDF9B51211B1D2B7A77″ decryption=”3DES” validation=”SHA1″/>
由于前段web是cluster server, 这里几台webserver上的web.config中machineKey的验证值必须相同,不可以直接使用系统所默认提供的AutoGen, 上面的key是我给的例子, 实际使用中可以用工具生成出来

到此为止就基本配置完毕了.

Leave a Reply