最近开发项目,由于涉及到Session保持的问题,最终查了一下网络上的相关方法,感觉用Sqlserver来保存Session好一点,经过综合测试,通过界面设置SQLSERVER SESSION会出问题,综合网上查找的资料做以下总结:
SQLServer
(1).net2.0以上,建议不要使用aspnet_regsql.exe工具,而应该使用命令行,如aspnet_regsql -C "Data Source=.;Integrated Security=True" -ssadd -sstype c -d SessionStateDB
原因是使用工具容易产生错误:SQL 服务器上未安装 ASP.NET 2.0 版会话状态,因此无法使用 SQL Server。请安装 ASP.NET 会话状态 SQL Server 2.0 版或更高版本。
此时的配置文件应该是如下格式:<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="data source=VM2008;initial catalog=SessionStateDB;user id=sa;password=ioffice" timeout="30" />
(2)当机器上同时存在.net1.1和.net2.0的时候,建议使用.net2.0的脚本。
(3)SQLServer模式容易带来效率上的开销,每个页面都会对数据库进行读写2次操作。解决办法在web.config文件中的system.web下的page修改属性,如<pages enableSessionState="ReadOnly"> 或者<pages enableSessionState="False">,在ioffice中一般使用readonly。同时把需要改写session的页面的EnableSessionState="True",一般是登录登出页面。
aspnet_regsql.exe 参数解析
-- 常规选项 --
-? 显示此帮助文本。
-W 向导模式。(如果未指定其他参数,则默认为此模式。)
-- SQL 连接选项 --
-S <server> 要使用的 SQL Server 实例(SQL Server 7.0 及更高版本)。
-U <login id> 用于进行身份验证的 SQL Server 用户名;需要 -P 选项。
-P <password> 进行身份验证时使用的 SQL Server 密码;需要 -U 选项。
-E 使用当前 Windows 凭据进行身份验证。
-C <connection string>
连接字符串。不指定用户名、密码和服务器名称,而是指定 SQL Server
连接字符串。该字符串不得包含数据库名称,除非另行指定。
-sqlexportonly <filename>
生成用于添加或移除指定的功能、但不执行实际操作的 SQL 脚本文件。可与以下选项一起使用: -A、-R、-ssadd 和 -ssremove。
-- 应用程序服务选项 --
-A all|m|r|p|c|w 添加对某个功能的支持。可同时指定多个值。例如:
-A mp
-A m -A p
all: 所有功能
m: 成员资格
r: 角色管理器
p: 配置文件
c: 个性化设置
w: SQL Web 事件提供程序
-R all|m|r|p|c|w 移除对一个功能的支持。可同时指定多个值。例如:
-R mp
-R m -R p
all : 所有功能以及由这些功能共享的所有公共表和存储过程
m: 成员资格
r: 角色管理器
p: 配置文件
c: 个性化设置
w: SQL Web 事件提供程序
-d <database> 用于应用程序服务的数据库名称。如果未指定任何数据库名称,则使用默认数据库“aspnetdb”。
-Q 安静模式;移除功能时不显示确认对话框。
-- SQL 缓存依赖项选项(用于 SQL 7.0 和 2000) --
-d <database> 用于 SQL 7.0 和 SQL 2000 中的 SQL 缓存依赖项的数据库名称。也可以改为选择使用带有 -C
选项的连接字符串指定该数据库。(必需)
-ed 为 SQL 缓存依赖项启用数据库。
-dd 为 SQL 缓存依赖项禁用数据库。
-et 为 SQL 缓存依赖项启用表。需要 -t 选项。
-dt 为 SQL 缓存依赖项禁用表。需要 -t 选项。
-t <table> 要为 SQL 缓存依赖项启用或禁用的表的名称。需要 -et 或 -dt 选项。
-lt 列出为 SQL 缓存依赖项启用的所有表。
-- 会话状态选项 --
-ssadd 添加对 SQLServer 模式会话状态的支持。
-ssremove 移除对 SQLServer 模式会话状态的支持。
-sstype t|p|c 会话状态支持的类型:
t: 临时。会话状态数据存储在“tempdb”数据库中。用于管理会话的存储过程安装在“ASPState”数据库中。如果重新启动
SQL,则不保持数据。(默认)
p: 保持。会话状态数据和存储过程都存储在“ASPState”数据库中。
c: 自定义。会话状态数据和存储过程都存储在自定义数据库中。必须指定该数据库的名称。
-d <database> -sstype 为“c”时使用的自定义数据库的名称。
总结:使用Sqlserver模式保存Session:即在命令行中输入C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regsql.exe -C "Data Source=.;Integrated Security=True" -ssadd -sstype p
即可创建ASPState数据库保存Session状态。
感谢MSDN提供的资料,感谢广大网友的辛勤探索!
转载请注明出处:http://blog.csdn.net/fwj380891124