在ASP.NET中,有很多种保存信息的对象。例如:Application,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?

为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示:

方法 信息量大小 保存时间 应用范围 保存位置
Application 任意大小 整个应用程序的生命期 所有用户 服务器端
Session 小量、简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端
Cookie 小量、简单的数据 可以根据需要设定 单个用户 客户端
Viewstate 小量、简单的数据 一个Web页面的生命期 单个用户 客户端
Cache 任意大小 可以根据需要设定 所有用户 服务器端
隐藏域 小量、简单的数据 一个Web页面的生命期 单个用户 客户端
查询字符串 小量、简单的数据 直到下次页面跳转请求 单个用户 客户端
Web.Config文件 不变或极少改变的小量数据 直到配置文件被更新 单个用户 服务器端

Application

1、Application用来保存所有用户共用的信息;

2、在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在Asp.Net开发环境中我们把类似的配置数据放在Web.config中;

3、如果要使用Application要注意的是所有的写操作都要在Application_OnStart事件中完成(global.Asax),尽管可以使用Application.Lock()避免了冲突,但是它串行化了对Application的请求,会产生严重的性能瓶颈;

4、不要使用Application保存大数据量信息;

5、代码:

写:Application["UserID"] = "test";

读:string UserName = Application["UserID"].ToString();

Session

1、Session用来保存每一个用户的专有信息;

2、Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右);

3、Session信息是保存在Web服务器内存中的,保存数据量可大可小;

4、Session超时或者被关闭将自动释放数据信息;

5、由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低;

6、代码:

写:Session["UserID"] = "test";

读:string UserName = Session["UserID"].ToString();

Cookie

1、Cookie用来保存客户浏览器请求服务器页面的请求信息;

2、我们可以存放非敏感的用户信息,保存时间可以根据需要设置;

3、如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止;

4、Cookie对象的Expires属性设置为MinValue表示永不过期;

5、Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据;

6、由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端;

7、代码:

写:Resopnse.Cookies["UserID"] = "test";

读:string UserName = Resopnse.Cookies["UserID"].ToString();

ViewState

1、ViewState用来保存用户的状态信息,有效期等于页面的生命周期;

2、可以保存大量数据但是要慎用,因为会影响程序性能;

3、所有的Web服务器控件都是用ViewState在页面PostBack期间保存状态;

4、不需要则关闭 @page 里面设置EnableViewState=false;

5、代码:

写:ViewState["ID"] = "test";

读:string ID = ViewState["ID"].ToString();

Cache

1、Cache用于在Http请求期间保存页面或者数据;

2、Cache的使用可以大大的提高整个应用程序的效率;

3、它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户;

4、可以看出Cache节省的是时间(服务器处理时间);

5、Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期,应用程序重启将重新创建其实例;

6、注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息;

7、代码:

写:Cache["ID"] = "test"; 或者 Cache.Insert("ID","test");

读:string ID = Cache["ID"].ToString();

Hidden

1、Hidden控件属于html类型的服务器控件,始终处于隐藏状态;

2、每一次提交的时候它会和其他服务器控件一起提交到服务器端;

3、代码:

写:Hidden.Value = "king";

读:string id = Hidden.Value; 要使用Runat=server

查询字符串

1、查询字符串的方式是将要传递的值连接在URL后面;

2、一般用于页面之间传递信息;

3、由于URL的长度有一定的限制,因此不能传递太大的信息;

4、安全性不是很好。

5、代码:

传值页面:Response.Redirect("List.aspx?id=123&name=abc");

取值页面:string name = Request.QueryString["name"]; string id = Request.QueryString["id"];

ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别(转)的更多相关文章

  1. APPlication,Session,Cookie,ViewState和Cache之间的区别

    1.Application:用于保存所有用户共用的数据信息. 在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都 ...

  2. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

  3. Application,Session,Cookie,ViewState和Cache区别

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  4. [区别]APPlication,Session,Cookie,ViewState和Cache

    原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewS ...

  5. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  6. (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别

    ================================================================================         1.Applicati ...

  7. Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别

    1.Application:用于保存所有用户共用的数据信息.在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都要 ...

  8. .NET Application,Session,Cookie,ViewState,Cache对象用法

    作用域 保存地址 生命周期Application 应用程序 服务器内存 IIS启动Session 整个站点 服务器内存 Session到时 默认20分钟Cashe 应用程序 服务器内存 应用程序的周期 ...

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

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

随机推荐

  1. innodb count优化测试

    对于索引优化真的是门课题,先来研究下最平常的问题,innodb引擎下 怎么让count(*)快一点. 首先需要清楚 innodb 默认是对主键建立聚簇索引,如果没有主键,那就是对具有唯一且非空值的索引 ...

  2. Multithreading in C

    Multithreading in C, POSIX(可移植操作系统接口Portable Operating System Interface X ) style Multithreading - A ...

  3. AI ML DL

    在经历了蛮荒的PC互联网时代,混战的移动互联网时代,到现今最火的人工智能时代. 大数据.云计算.机器学习的技术应用,已经使得IT从业者的门槛越来越高. 套用一句樊登读书会的宣传口号“keep lear ...

  4. java并发编程实战:第七章----取消与关闭

    Java没有提供任何机制来安全地终止线程(虽然Thread.stop和suspend方法提供了这样的机制,但由于存在缺陷,因此应该避免使用 中断:一种协作机制,能够使一个线程终止另一个线程的当前工作 ...

  5. [Postgres]postgresql.conf : Permission denied处理一法

    使用yum安装完postgresql,没有使用默认的DATA地址,自己配置了DATA地址以后,使用root权限启动service service postgresql start ,报出了" ...

  6. nancyfx 自定义路由module

    在源码的Nancy.Demo.CustomModule项目示例中 查看UglifiedNancyModule.cs文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...

  7. 在JS中简单实现Formatter函数

    JS原生并没有提供方便使用的Formatter函数,用字符拼接的方式看起来混乱难读,而且使用起来很不方便.个人感觉C#里提供的语法比较好用,如: String.Format("Welcome ...

  8. Javascript设计模式理论与实战:组合模式

    我们平时开发过程中,一定会遇到这种情况:同时处理简单对象和由简单对象组成的复杂对象,这些简单对象和复杂对象会组合成树形结构,在客户端对其处理的时候要保持一致性.比如电商网站中的产品订单,每一张产品订单 ...

  9. Centos7 创建Eclipse启动

    Eclipse是一个集成开发环境(IDE),包含一个基工作区和定制环境的可扩展插件系统.大部分使用 Java 编写,Eclipse 可以用来开发应用程序.通过各种插件,Eclipse 也可以用于其他编 ...

  10. 其他信息: 实体类型 xxxxx 不是当前上下文的模型的一部分。

    我是手动添加的EF类的,   解决方法: 没有在DbContext 添加  public virtual DbSet<xxx> xxxx{ get; set; } 导致不在上下文中