.Net 我的学习之路(五) --- Asp.Net 页面状态的实现原理

    页面状态机制的具体实现原理

 

   上次我们讲到了 Asp.net 提供了一系列的维持页面状态的机制,有 Session, Cookie, ViewState Application Cache HiddenField 等。这次我来讨论一下一些机制是如何实现的。

  • Session Session 的实现是依赖于 SessionID 的,每次 client 端访问 server 端的时候,服务器都会给 client 分配一个 SessionID ,下次 client 再次访问的时候,在 Request 里面把这个 SessionID 一起提交给 Server Server 就能根据 Request 里面的 SessionID 来找到在 Server 端所储存的数据了。那么现在的问题就是这个 SessionID client 端被放在哪里了呢?答案就是 Cookie 中,但是如果 client 端禁用了 Cookie ,那这个 SessionID 又该怎么办呢?哈哈,还可以通过 QueryString 来传递。所以 Session 机制的实现是依赖于 Cookie QueryString 的。

  • ViewState 。前文提到,在 ViewState 中存放的对象必须是可以序列化的对象,这是和它的实现机制有很大关联的。序列化可以把内存中的对象转变为 string ,还可以根据 string 转变回内存中的对象,这种机制是方便了我们进行对象的持久化。 Asp.net 把放入 ViewState 中的对象作为一个整体序列化成为一个 HiddenField string Value HiddenField 前文已经提到了,是一个页面的隐藏域,每次 Postback 之后,这个 HiddenField 中的 value 就会被传回并被反序列化为 ViewState 。所以 ViewState 的实现就是依赖于 HiddenField ,你可以看见每个页面再 Render client 端的时候都会带有一个这样的 HiddenField, <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="XXX"/> 。看,这就是在 Client 端的 ViewState 了,不过由于是序列化过的,我也不知道里面是什么了。所以 ViewState 是不能在 Client 端进行操作的,不过普通的 HiddenField 就可以哦

 

  • 其他的页面状态实现的机制就比较简单。 Cookie 是在 Client 端以文件方式存储的。 Application Cache 是在 server 端内存中存储。 QueryString 是在 Url 里面存储。 HiddenField 是以 Html 元素存储。

     

     希望了解了这些机制以后,能使你更清楚地了解什么时候该使用哪种机制来存储页面的状态。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章