ASP.NET:Application,Session,Cookie,ViewState和Cache之间的区别(转)
在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之间的区别(转)的更多相关文章
- APPlication,Session,Cookie,ViewState和Cache之间的区别
1.Application:用于保存所有用户共用的数据信息. 在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都 ...
- Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别
2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...
- Application,Session,Cookie,ViewState和Cache区别
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- [区别]APPlication,Session,Cookie,ViewState和Cache
原文发布时间为:2009-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewS ...
- ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)
在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...
- (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别
================================================================================ 1.Applicati ...
- Application,Session,Cookie,ViewState,Cache对象用法、作用域的区别
1.Application:用于保存所有用户共用的数据信息.在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都要 ...
- .NET Application,Session,Cookie,ViewState,Cache对象用法
作用域 保存地址 生命周期Application 应用程序 服务器内存 IIS启动Session 整个站点 服务器内存 Session到时 默认20分钟Cashe 应用程序 服务器内存 应用程序的周期 ...
- 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法
转载原地址 http://www.cnblogs.com/cuishao1985/archive/2009/09/24/1573403.html ASP.NET状态管理 APPlication,Ses ...
随机推荐
- innodb count优化测试
对于索引优化真的是门课题,先来研究下最平常的问题,innodb引擎下 怎么让count(*)快一点. 首先需要清楚 innodb 默认是对主键建立聚簇索引,如果没有主键,那就是对具有唯一且非空值的索引 ...
- Multithreading in C
Multithreading in C, POSIX(可移植操作系统接口Portable Operating System Interface X ) style Multithreading - A ...
- AI ML DL
在经历了蛮荒的PC互联网时代,混战的移动互联网时代,到现今最火的人工智能时代. 大数据.云计算.机器学习的技术应用,已经使得IT从业者的门槛越来越高. 套用一句樊登读书会的宣传口号“keep lear ...
- java并发编程实战:第七章----取消与关闭
Java没有提供任何机制来安全地终止线程(虽然Thread.stop和suspend方法提供了这样的机制,但由于存在缺陷,因此应该避免使用 中断:一种协作机制,能够使一个线程终止另一个线程的当前工作 ...
- [Postgres]postgresql.conf : Permission denied处理一法
使用yum安装完postgresql,没有使用默认的DATA地址,自己配置了DATA地址以后,使用root权限启动service service postgresql start ,报出了" ...
- nancyfx 自定义路由module
在源码的Nancy.Demo.CustomModule项目示例中 查看UglifiedNancyModule.cs文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 ...
- 在JS中简单实现Formatter函数
JS原生并没有提供方便使用的Formatter函数,用字符拼接的方式看起来混乱难读,而且使用起来很不方便.个人感觉C#里提供的语法比较好用,如: String.Format("Welcome ...
- Javascript设计模式理论与实战:组合模式
我们平时开发过程中,一定会遇到这种情况:同时处理简单对象和由简单对象组成的复杂对象,这些简单对象和复杂对象会组合成树形结构,在客户端对其处理的时候要保持一致性.比如电商网站中的产品订单,每一张产品订单 ...
- Centos7 创建Eclipse启动
Eclipse是一个集成开发环境(IDE),包含一个基工作区和定制环境的可扩展插件系统.大部分使用 Java 编写,Eclipse 可以用来开发应用程序.通过各种插件,Eclipse 也可以用于其他编 ...
- 其他信息: 实体类型 xxxxx 不是当前上下文的模型的一部分。
我是手动添加的EF类的, 解决方法: 没有在DbContext 添加 public virtual DbSet<xxx> xxxx{ get; set; } 导致不在上下文中