1. Session: 
    1. 客户在服务器上第一次打开Asp.Net页面时,会话就开始了。当客户在20分钟之内没有访问服务器,会话结束,销毁session。(当然也可以在Web.config中设置缓存时间)可以在Global.aspx的Session_Start()事件处理程序中,可以初始化会话变量。在下面的实例中,名为mydata的会话状态被初始化为0:

运行结果:

2.Session是保存在服务器端的用户变量。我可以在一个页面中对Session进行值,然后在另一个页面里访问它。

Session的附值方法如下:

2.Application

解释:如果数据应在多个客户端共享,就可以使用应用程序状态来保存。应用程序状态的使用方式跟Session非常相似。对于应用程序状态,应使用HttpApplication类,通过Page类的Application属性就可以访问它。

通常Application可以用来统计访问网站的人数,在启动Web应用程序时,初始化应用程序变量userCount。 Application_Start()是global.asax文件中的时间处理程序方法,在启动网站的第一个Asp.Net页面时调用该方法。

在Application_Start()事件处理程序中,应用程序变量userCount的值会递增。在改变应用程序变量之前,应用程序对象必须用Lock() 方法锁定,否则会出现线程问题,因为多个用户可以同时访问一个应用程序变量。在改变了应用程序变量的值后,还必须调用Unlock()方法。注意锁定和解 锁时间的时间比较短,在此时间段内,不应读文件或数据库中的数据。否则,其他用户就必须等到数据访问完成之后才能操作。

运行结果:

注意:不要在应用程序状态中存储太多的数据,因为应用程序状态需要服务器资源,直到服务器停止或重启之后,才会释放这些资源。

 3.Cache

使用Cache类的优点是当缓存的数据发生变化时,Cache类会让数据失效,并实现缓存数据的重新添加,然后通知应用程序,报告缓存的及时更新。

1.常用的方法

创建cache  
  在DotNet环境下通过Cache.Insert(string key,object o)方法创建。
      其中key 代表cache的ID,o代表存到cache里的对象。
 Add: 将数据添加到Cache对象
  Insert: 向Cache中插入数据项,可用于修改已经存在的数据缓存项
   销毁cache 
  通过方法Cache.Remove(string key)
     
其中key 代表cache的 ID.
   调用cache  
  Cache支持装箱/拆箱操作。如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作 DataSet ds =
(DataSet)Cache[“dsCache”]
来访问它。
      获取数据
 Get:从Cache对象中获取指定的数据项,注意返回的是Object类型,需要进行类型转换
 GetType:从Cache对象中获取数据项的类型,判断数据类型后,方便进行转换
GetEnumerator
 循环访问Cache对象中的缓存数据项。注意其返回类型是“IDictionaryEnumerator”
下面的代码演示了如何应用Cache类的这些方法。在使用本代码时需要注意,代码中使用了Arraylist对象,所以需要添加对命名空间“System.Collections”的引用,同时使用Cache类别忘记了添加命名空间

技巧:在使用GetType方法时,如果要判断类型,需要使用Object.GetType().Name属性获取类型的名称。

运行结果:

其中在读取类型为ArrayList的数据时,由于没有进行类型转换,所以取出的是类型为“System.Collections.ArrayList”的对象。

2.什么时候用cache  
  Cache 一般用于数据较固定,用的较频繁的地方。例如可以把进销存系统中可以把产品信息存入cache,在用户调用产品信息时通过调用cache即可,这样从很大 程度上减少了用户与数据库的交互,提高了系统的性能。反之,cache不适合用在数据变动快,使用范围很窄的地方。例如把一个具体采购单存入 cache中。
   3.cache 调用注意事项  
  Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。所以以下这种调用就会出现异常
  4.缓存功能

典型应用:实现数据的缓存快速读取功能

本例的目的是将目录列表填充到下拉框中,当缓存失效后,目录列表的内容为空。演示的步骤如下所述。

在5秒以内如果单击按钮,则正常显示目录列表,如果超过5秒,则缓存对象已经不存在,所以下拉列表框的内容为空。

4. Viewstate

一、ViewState的原理

1.浏览器请求Default.aspx页面
2.在服务器端 发现创建的ViewState 这个时候 会自动创建一个名字叫做__VIEWSTATE(双下滑线 全部是大写)的隐藏域 其隐藏域的值经过base64加密以后返回到浏览器端这一加密过程在页面生命周期的SaveState事件中的SaveAllState方法中完成

3.当浏览器提交表单的时候 将__VIEWSTATE的隐藏域也一起提交到服务端 这个时候 页面生命周期的ReadState事件
的ReadAllState方法会将加密后的值反base64解密
最后将值赋值给名字叫做name的ViewState
4.最后来操作ViewState中的值

二、ViewState的用法:

1.定义ViewState属性

public int
PageCount{

get{return
(int)ViewState["PageCount"];}

set{ViewState["PageCount"]=value;}

}

2.使用ViewState的条件

如果要使用ViewState,则在ASPX页面中必须要有一个服务器端窗体标记(<form runat =
"server">)。窗体字段是必须的,这样包含ViewState信息的隐藏字段才能被传回服务器。而且,该窗体还必须是服务器端的窗体,这样
在服务器上执行该页面时,ASP.net页面框架才能添加隐藏字段。

page的EnableViewState 属性值为true

控件的EnableViewState 属性值为 true

四、viewstate与session的对比

(1) session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面. 而session则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.

(2) session在默认情况下20分钟就过期,而viewstate则永远不会过期.

但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型.

任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更多的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你 存储其中的对象和变量值

5. Cookie
用于保存客户浏览器请求服务器页面的请求信息,其有效期可以人为设置,而且其存储的数据量很受限制,因此不要保存数据集及其他大量数据。而且Cookie以明文方式将数据信息保存在客户端的计算机中,因此最好不要保存敏感的未加密的数据。

以下是cookie的几种方法:

6.隐藏域


隐藏域是网页里面一个特殊的空间,它不在网页中显示出来,主要用途是为网页交互时存储一些不需要在网页显示的数据
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名称和值发送到服务器上。

例如:<input type="hidden" name="ExPws"
value="dd">
其实说白了就隐藏域不在前台显视的,跟表单的元素一样.有名字有数值,只是在提交数据是不可见的.

例子:在ASP中隐藏域可以用于隐藏的表单,这样输入框就可以不受表单的限制可以随意在网页上布局
<input name="id"
type="hidden" value="abc">
<%="隐藏域值为:"& request("id")%>

提交此表单后会显示

隐藏域值为:abc

 7.查询字符串

当服务器执行到Response.Redirect语句时,会立即中断页面的生命周期,直接向客户端返回信息,让客户端进行重定向操作。

ASP.NET中,服务器端重定向有三种方法

1.Server.Transfer("xxx.aspx"):

服务器停止解析本页,保存此页转向前的数据后,再使页面转向到newPage.aspx,
并将转向前数据加上newPage.aspx页结果返回给浏览器。

2.Server.Execute("xxx.aspx");

服务器保存此页转向前的数据后,使页面转向到newPage.aspx执行, 再返回本页继续执行.再将三者结果合并后返回给浏览器.

3.Response.Redirect("xxx.aspx"):

服务器执行到这个方法时,就发信息告诉客户端浏览器,让客户端浏览器发出一个新的http请求,该请求的url为"xxx.aspx"。浏览器于是通过全新的http请求而转到了xxx.aspx页面。

总结:

1.用户变量的存储:session比较常用

2.页面跳转:查询字符串比较常用

3.缓存

l  cookie(用于保存客户浏览器请求服务器页面的请求信息,其有效期可以人为设置,而且其存储的数据量很受限制)

l  cache(用于数据缓存更新)

l  viewstate(存储在一个隐藏域里面, 不占用服务资源,永远不会过期但会增加html输出量,占用带宽)

l  application(应用于整个应用程序,相当于全局变量,但是用处不是很广泛,可以用于统计人数)

[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)的更多相关文章

  1. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  2. 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法

    转载原地址 http://www.cnblogs.com/cuishao1985/archive/2009/09/24/1573403.html ASP.NET状态管理 APPlication,Ses ...

  3. c# Cookie,Session,Application,Cache 四种缓存使用情景

    好记性不如烂笔头,记录一下C#缓存使用的情景模式....个人理解,不正之处,欢迎指正 讨论 Cookie,Session,Application,Cache 四种,有的缓存情景对人,有的缓存情景对事儿 ...

  4. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

  5. ASP.NET状态管理的总结

    阅读目录 开始 hidden-input QueryString Cookie ApplicationState ViewState,ControlState Session Profile 各种状态 ...

  6. Unit07: 状态管理-Session

    Unit07: 状态管理-Session web package web; import java.io.IOException; import java.io.PrintWriter; import ...

  7. [Asp.Net]状态管理(ViewState、Cookie)

    简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...

  8. ASP.NET状态管理详解,让你明明白白

    开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...

  9. ASP.NET状态管理策略

    如果要想把信息存储在客户端那可以选择视图状态.控件状态.隐藏字段.cookie.和查询字符串. 1.web窗体页提供viewstate属性作为内置结构,在同一页的多个请求间自动保留值.他作为页面的隐藏 ...

随机推荐

  1. document.documentElement和document.body区别

    body是DOM对象里的body子节点,即body标签, documentElement 是整个节点树的根节点root, 详细介绍请看本文,感兴趣的朋友可以参考下   区别: body是DOM对象里的 ...

  2. SqlServer跨域查询

    SELECT * FROM OPENDATASOURCE('SQLOLEDB','Data Source=192.168.1.14;User ID=sa;Password=sql.com').eBui ...

  3. Xcode使用xib拖线时出现: could not insert new outlet connection

    解决方法: 1.在新建类的时候没有选择将这个类加入到对应的"Target"中. 2.重新将文件加入项目 操作步骤就是选中出问题的.m和.h文件,点删除键,然后选"Remo ...

  4. 读书笔记_Effective_C++_条款二十三:宁以non-member、non-friend替换member函数

    有下面一种情况 class A { private: int a; int b; public: A(int x, int y) :a(x), b(y){} void a_display(){ cou ...

  5. Zepto源码笔记(三)

    ps:本文中"组装成成数组"指的是若元素个数大于1则返回数组,若元素只有1个则返回元素本身 以下函数是$.fn该对象的方法 ready(callback) 通过readyRE正则表 ...

  6. 自律训练法 John Sehorz

    自律训练法,系1932年由德国精神医学医师John Sehorz所创立.他研究人们在催眠催眠状态下,所呈现的生理状态,如:沉重与温暖感.. ,因而,John Sehorz改以「逆向操作」之方式,由自我 ...

  7. MVC 中引入Jquery文件的几种方法

    方法1: <script src="@Url.Content("~/Scripts/jquery-1.9.1.js")" type="text/ ...

  8. 关于炒股软件——金魔方炒股软件的Dll外挂开发

    2015-01-19 14:40:04 金魔方平台是由飞狐交易师原创团队集多年研发经验,依靠和讯财经网强大资源,吸取国际专家思路而推出的十年巨作.目前新出的这个2.0版,这一版在数据存储方面作很大的改 ...

  9. Configuring HTTP and HTTPS

    Configuring HTTP and HTTPS .NET Framework (current version)   Other Versions   WCF services and clie ...

  10. Cmake编译成静态库

    To build OpenCV as static library you need to set BUILD_SHARED_LIBS flag to false/off: cmake -DBUILD ...