在ASPX页面中,每个控件的状态,通过VIEWSTATE进行保持,但前提是必须以回调的方式进行调用。我们的很多页面处理,都是以URL调用的方式进行的,无法使用VIEWSTATE。
在上例的分页处理中,使用了URL参数来传递状态,这种传递方式简单明了,但也存在问题:
1、复杂
2、和其他方式之间的共处存在问题
特别是第二点,在分页中体现得非常明显:既要能通过URL传递,还要允许页面控制,还要能传递新的参数。要实现这一要求,只能借助复杂的处理逻辑来实现了:
这种方式,当页面还有其他参数的时候,就会很难控制,因为必须要想办法把页面现有的所有参数都传递给其他的分页。因此,在构造分页器的时候,必须手工把其他所有参数解析出来,再传递给分页器。这种模式既复杂,又容易出错。
参数传递的种种不便之处,使人不禁想到,为何非要使用URL呢?还有更加简洁诶的方案,如Session或者Cookie。很多参数,如条件、传入初始参数等,在页面以及跳转中,基本都不会发生变化,用Session或者Cookie来保存,正好符合这两种方式的特点。
那么,究竟选择cookie还是session呢?session是一个应用级别的状态保存机制,也就是说,在整个浏览过程中,session都会有效。但session也存在不足:
1、session存放在服务器端,占用服务器的资源
2、多个页面公用session,容易导致混乱,如果每个页面都分别保存,则有造成资源的浪费
3、Session本身有失效周期,在一些长期工作的页面,带来问题
而cookie相对来说,正好没有session的不足。首先,cookie不占用服务器资源,其次,cookie按键-值的方式存储,正好可以用每个页面的名称为key,为每个页面创建状态。
根据各种应用的需要,状态机制应该达到如下的要求:
1、对于URL的参数,自动读入并以cookie的方式保存。以后每次可以直接读入。
2、对于参数,可以修改,自动存入cookie。
3、对于session参数,也同样处理。
这种机制也是解决session过期的有效方法。
原文地址:http://www.cnblogs.com/jetz/p/3751400.html