.Net 我的学习之路(四) --- Asp.Net 页面状态

    Web开发有一个很大的特点,就是基于 Http 协议的通信方式。 Http 协议特点就是一个 Request 就有而只有一个 Response ,而且是无状态的通信方式。什么是无状态呢?那就是 client 端并没有一个状态记录,每次 client 端的页面都是从 server 端重新加载的, client 端之前所有的一切都会丢失,被从 server 端的数据重新覆盖。这就是为什么你在浏览网页的时候会看见出现一闪即逝的白屏,那就是 client 端刷新到之前的网页,而开始渲染刚从 server 端读到的数据。

 

这个特点非常重要,对我们实现一些功能有很大的影响。更详细的 http 模型请参考

那么因为 Asp.net 可以像有状态一样操作呢。我登陆了一个网站,接着我都是以我这个身份浏览其他页面。我开始搜索,把搜索结果翻到第二页,搜索条件我并没有重新输入啊。这些操作除了页面有刷新,其他的就像你操作一个 winform 程序没什么区别。那 Asp.net 是怎么做到的呢?

答案就是页面状态。 Asp.net 允许使用各种技术来帮助我们维持页面状态。

1.  Session 当用户打开一个网站,就 server 端会分配一个 Session ,每个用户的 Session 都保存在服务器端,各不一样,不会被互相干扰。在 Asp.net 中的 Session 是一个 Dictionary[string, object] 。你可以用 Session[“key1”] = 100, 或者 object value1 = Session[“key1”]

2.  Cookie 用户对应每个网站,都会在 client 端开辟一个 cookie 文件,来保存用户的 cookie 信息。 Cookie 只能存储 string 类型的信息,而且避免记录敏感信息,因为 Cookie 记录在 client 端,容易被人窃取。需要注意的是, cookie 是可以被用户禁用的,所以在开发网页的时候不能太过依赖 cookie

3.  ViewState ViewState asp.net 的一个概念,可以存储一个页面上的所有状态。特别要提示的是 ViewState 只能保存一个页面的状态,跨页面就不行了。 ViewState 是一个类似 Dictionary[string, object] 的集合。它的用法和 Session 差不多,不过需要注意的是放入 ViewState 中的 object 必须是能够被序列化的。所有页面中的控件都会有自己的 ViewState ,不会相互干扰。

4.  HiddenField Asp.net 有一个 HiddenField 控件,你会发现添加了这个控件页面并没有任何显示,但其实它是一个隐藏控件,在 html 下的表示为 <input type=”hidden”/> 。是可以保持页面的数据。它的功能有点像 ViewState ,不过只能保存 string 类型的数据。

5. QueryString QueryString 是一种对 Url 上的请求,比如: http://localhost/default.aspx?key1=value1&key2=value2 Asp.net 中, QueryString 是一个类似 Dictionary<string, string> 的数组。你可以用 string value1 = QueryString[“key1”] 来取值。

6.  Application Application server 端的一个全局的状态变量。要注意的是,首先,这个状态变量是建立在内存中的,其次是这个状态变量是可以被网站的所有页面访问的。这就意味着它只能存储一些要公布的信息,而不能存储一些比较个人的信息了。

7.  Cache Cache 也是 server 端的全局的状态变量,而且它除了拥有 Application 的功能以外,还有一些它自己的特性,自动更新和释放。所有 Cache 比起 Application 更具有灵活性。在 Asp.net 里面你可以这样使用 Cache Cache["key1"] = "Value 1"; 或者  Cache.Add("Key1", "Value");

 

 

以上就是 Asp.net 可以使用的保持页面状态的机制。但是不要忘记,所有开辟在 server 端内存中的页面状态都会因为 website 重启中消失,但是导致 website 重启的可能性实在太多,所以太过依赖于服务器的 Session,Application,Cache 都不是安全的。当然, Asp.net 允许我们并不一定把页面状态存放在内存中哦,让我在之后讲。

 

 


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值