我们知道,http是无状态的协议.所以在进行WEB应用程序开发的过程中,怎么在用户的多次请求中保持页面/用户信息会给我们造成一些小麻烦.ASP.NET1.1为我们提供了诸如ViewState,Session...等方式,在ASP.NET2.0中,则对这些方式进行了一些改进和扩展.
- ViewState
在ASP.NET1.1中,ViewState是通过客户端的html中的一个隐藏字段在客户端和服务器端进行信息的来回传送.这就会存在一个问题:如果信息量过大,这种数据的来回传递将会严重的影响程序的性能.(至今还记得,原来项目中的某处,客户需要一次显示2W多条数据在同一个页面上-----BT的需求.这个时候,由于页面的DataGird中的大量数据,使得在PostBack的时候直接把IIS给"干掉"了)一般对于这种BT的情况,在ASP.NET1.1中,我们会禁用DataGird中的ViewState,然后每次PostBack都重新进行绑定.如今,在ASP.NET2.0中提供了一种新的方式:将ViewState的数据保存在服务器端的Seesion中.我们的程序只需要做如下一点小小的改动.在需要将ViewState的数据放到服务器Seesion的页面中,重写PageStatePersister属性,如下:protected override PageStatePersister PageStatePersister { get { // return base.PageStatePersister; return new SessionPageStatePersister( this ); } }
这样,我们仍然可以按照原来的编码方式对ViewState进行操作,就象他仍然是在B/S之间来回传递.但是性能却能显著提高. - Session
OK.上面提到了Session,我们也知道Seesion存储在服务器端,如果Seesion中的保存了大量数据,也会影响程序整体的性能.现在,我们还可以把Session放到数据库中.也相当的简单.我们只需要通过VS2005提供的ASPNET_REGSQL.EXE工具生成一个专门存放Session的数据库.然后,在我们的Web.config里面做如下配置:< sessionState mode ="SQLServer" sqlConnectionString ="data source=.; integrated security=true" > sessionState>
同样,在编码的时候,我们仍然可以按照原来的方式进行,Asp.net2.0会帮我们把Session的信息保存在数据库中.当然和原来方式相比,加入了一个数据库的开销,可能性能方面还不知道孰优孰劣,不过通过数据库的持久化,我们就可以解决原来的Session过期的问题,而且通过数据库,可能在数据安全方面会得到提高.另外,我总觉得可以把Session中数据持久化这个功能可以派上大用场,但现在一直想不到一个适合的场景,也没看到相关的文章,就是一个感觉:)要注意的一点就是:因为Session中的数据要持久化到数据库中,所以,当我们把一些自定义的类往Session中放的时候,一定要记得给这个类打上[Serializable]!
正所谓,凡事都没有完美的解决方案,Asp.net2.0为我们提供的新的页面持续的方法也不是完美的,至于孰优孰劣,就只有看具体的应用场合了.