张银的博客


Eat to live, but do not live to eat.

导航

Application/Session/Cookie/Viewstate/Cache的区别

Application
  
1. Application用来保存所有用户共享的信息,IIS停了就都初始化了
2.在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在Asp.net开发环境中我们把类似的配置数据放在Web.config中。
3. 如果要使用Application 要注意的是所有的写操作都要在Application_OnStart事件中完成(global.Asax),尽管可以使用Application.Lock()避免了冲突,但是它串行化了对Application的请求,当网站访问量大的时候会产生严重的性能瓶颈。需建立global.asax,需悲观的锁定Lock/UnLock
4. 不要使用Application保存大数据量信息
5.代码:
Global.asax

void Application_Start(object sender, EventArgs e)
{
  Application[
"a"= 0;
}

.cs

...(  )
{
Application.Lock();
Application[
"a"= (int)Application["a"+1;
sting a = Application["a"].ToString();
Application.UnLock();
}


Session
1.Session用来保存每一个用户的专有信息
2.Session的生存期是用户持续请求时间加上一段时间(默认20分钟)
3.Session信息是保存在Web服务器内存中的,保存数据量可大可小
4.Session超时或者被关闭将自动释放数据信息
5.由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低
6.对于小量的数据Session对象保存还是一个不错的选择
7.asp php等Session是依赖Cookie的,如果用户不接受Cookie,那么Session也不能用;.net摒弃了,只要web.config设置Cookiesless为True,Session就可以自立门户了
8.代码:

//存放信息
Session["UserNameID"]="1000";
//读取信息
String NameID=Session["UserNameID"].ToString();


CooKie 
1.Cookie用来保存客户浏览器请求服务器页面的请求信息
2. Cookie以明文方式将数据信息保存在客户端的计算机中,因此最好不要保存敏感的未加密的数据
3. 保存有效期可以根据需要设置,如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止
4.Cookie对象的Expires属性设置为MinValue表示永不过期
5. Cookie存储的数据量受限制,大多数的浏览器为4K,因此不保存放数据集及其他大量数据。
6. 由于并非所有的浏览器都支持Cookie
7.代码:

//存放信息
Response.Cookie["UserNameID"].Value="1000";
//读取信息
String NameID=Response.Cookie["UserNameID"].Value;

 

HttpCookie nc = new HttpCookie("newcookie");
nc.Values[
"name"= "aidd";
nc.Values[
"age"= "22";
nc.Values[
"dt"= DataTime.Now.ToString();

HttpCookie getcook 
= Request.Cookies["newcookie"];
Response.Write(getcook.Values[
"age"]);


viewstate
session viewstate
占用服务器资源 true false
time out true false
存储任何.net类型 true false(只支持strings, integers, Booleans, arrays, ArrayList, hashtable, custom TypeConverters)
加重html负载 false true

session 对整个 application 有效 ,而 viewstate 相当于某个页面的 session

1.常用于保存单个用户的状态信息,有效期等于页面的生命周期
2.可以保存大量的数据但是过多使用会影响应用程序的性能
3.所有Web服务器控件都使用ViewStat在页面回发PostBack期间保存自己的状态信息
4.每个控件都有自己的ViewState,不用时最好关闭以节省资源
5.通过给@Page指令添加"EnableViewState= false"属性可以禁止整个页面的ViewState
6.代码

// save in ViewState 
ViewState["SortOrder"= "DESC";
// read from ViewState 
string sortOrder = (string)ViewState["SortOrder"];


Cache
1.Cache用于在Http请求期间保存页面或者数据
2.Cache的使用可以大大的提高整个应用程序的效率
3. 它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后服务器不是再次处理而是将Cache中保存的数据直接返回给用户
4.可以看出Cache节省的时间是服务器处理时间
5.Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期;应用程序重启将重新创建其实例
6.注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息
7.代码:

//存放信息
Cache["UserNameID"]="1000";
//存放信息
Cache.Insert("UserNameID","1000");
//读取信息
String UserNameID=Cache["UserNameID"].ToString();


隐藏域
1.Hidden控件属于Html类型的服务器控件(要使用Runat=server),可以实现隐藏域的功能,他和其他的控件没什么区别只是不会在浏览器上显示,始终处于隐藏状态。
2. 每一次提交的时候它会和其他服务器控件一起提交到服务器端
3.代码:

//存放信息
Hidden.Value="1000";
//读取信息
String UserNameID=Hidden.Value;


查询字符串
将传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向。

Response.Redirect("User.aspx?UserNameID=10000&LevelD=100");

执行上面的语句后在IE地址栏显示的URL的代码如下:
http://localhost/User.aspx?UserNameID=1000&LevelID=100
当跳转到User.aspx后,可以通过下面代码获得传递的信息:

String UserNameID,LevelD;
UserNameID
=Request.Params["UserNameID"];
LevelD
=Request["LevelD"];