ASP.NET 的状态管理 |
本文标签:状态管理 ASP.NET web Form 网页是基于HTTP的,它们没有状态,这意味着它们不知道所有的请求是否来自同一台客户端计算机,网页是受到了破坏,以及是否得到了刷新,这样就可能造成信息的丢失 。于是,状态管理就成了开发网络应用程序的一个实实在在的问题 。 在ASP中能够通过Cookie 、查询字符串、 应用程序、会话(Session) 等轻易解决这些问题 。现在在ASP.NET环境中,我们依然可以使用这些功能,并且功能更加强大 。 状态管理分为服务端和客户端两种情况,这里只是介绍服务端状态管理:与Application对象不同的是, ASP.NET 的Session对象可以在IIS服务器或者工作进程重新启动时恢复启动前的状态而不丢失其中的数据 。这是因为存储在Session中的所以信息都缺省的存储在一个作为Windows服务运行的状态服务器进程中 。状态可以被序列化并以二进制形式保存在内存中 。程序员可以悬着使用Microsoft Sql server数据库来存储数据 。 圆括号中长长的字母、数字字符串就是会话ID 。ASP.NET引擎从查询字符中提取会话ID,并将用户请求与特定会话联系起来 。采取这种方式,不管Cookie还是隐藏表单字段都用不着了 。所以,即使网页中没有使用表单,也能加入会话 。 2 mode属性设为Off 为了克服inproc 模式的缺点, ASP.NET 提供了两种进程外保存会话状态的方法 。 显然,使用状态服务的优点在于进程隔离,并可在Web farm中共享 。 使用这种模式,会话状态的存储将不依赖于iis进程的失败或者重启,然而,一旦状态服务中止,所有会话数据都会丢失 。换言之,状态服务不像SQL Server那样能持久存储数据;它只是将数据存储在内存中 。 4 用SQL Server进行会话管理 在这种情况下,ASP.NET尝试将会话数据存储到由sqlConnectionString属性(其中包含数据源以及登录服务器所需的安全凭证)指定的SQL Server中 。为了用恰当的数据库对象来配置SQL erver,管理员还需要创建ASPState数据库,方法是运行WinDir\Microsoft.Net\Framework\Version文件夹中的InstallState.sql脚本(WinDir是服务器的Windows文件夹,而Version是你使用的.NET框架版本的安装文件夹) 。要配置SQL服务器,可以在命令行中运行SQL Server 提供的命令行工具osql.exeosql -S [ server name] -U [user] -P [password] 例如:osql -S (local)\NetSDK -U sa -P "" -i InstallSqlState.sql 卸载这些表和存储过程,可以使用UninstallSqlState.sql脚本,使用方法与上面类似 。做好必要的数据库准备工作后,将web.config 文件中的sessionstate 元素的mode改为"sqlserver",并且指定SQL连接字符串 。具体如下: mode="sqlserver" (责任编辑:铭铭) |