状态管理

Application
1 是HttpApplicationState类的一个实例,在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。
  优点:
 Application对象等价全局变量库,在所有用户中共享,访问数据快
  缺点:
 占用服务器资源,在多个服务器配置中要在每个服务器上配置一次
2 使用方法如下:
Application.Lock();
Application["变量名"]="变量值";
Application.UnLock();


Session:
1 HTTP协议是一个无连接的协议,也就是说这次对话的内容和状态与上次的无关,为了实现和用户的持久交互,网站与浏览器之前在刚建立会话时将在服务器内存中建立一个Session,该Session标识了该用户(浏览器),每一个Session都有一个唯一的ID,第一次建立会话时服务器将生成的这个ID传给浏览器,浏览器在接下来的浏览中每一个发向服务器的请求中都将包含该SessionID,从而标识了自己的身份。
优点:
有三种方式保存:进程内(服务端缓存),进程外(aspnet_state.exe Asp.net state服务),数据库。
可以配置为无cookie
可以设置过期时间
缺点:
进程内的session容易丢失
无cookie配置容易被攻击

2 进程内Session丢失原因:
修改了config或asax文件
修改了bin或app_code目录
在web.config中设置了processModel的从新启动时间

3 使用方法:
   添加 : Session.Add("名称", 值); 
   删除 : Session.Remove("名称");
   删除所有 : Session.Abandon();    
   设置session过期: <sessionState  timeout=”1” />

4 进程外session使用:
  启动aspnet_state服务
  在配置文件中添加:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"></sessionState>
  使用[Serializable]标识类

5 数据库session使用:
  添加数据库: aspnet_regsql -S localhost -U sa -P sa -ssadd -sstype p
  <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=.;uid=sa;pwd=sa;database=ASPState"></sessionState>
 

Cookie:
1 优点:
不占用服务端资源
缺点:
可能被浏览器拒绝
不适合大数据量和敏感数据
占据每个Http请求的响应空间

2 使用:
 写:HttpCookie cookie = new HttpCookie("User");
     cookie.Values.Add("zzzz", "a0000");
            cookie.Values.Add("aaaa", "b0000");
     Response.Cookies.Add(cookie);
        读:HttpCookie ck = Request.Cookies["User"];
     Response.Write(ck.Values["zzzz"]);
     Response.Write(ck.Values["aaaa"]);


ViewState:
1 在页面显示名为__VIEWSTATE的隐藏字段,viewstate必须标记为Serializable
2 为了提高性能,尽量减少viewstate
 EnableViewState="false"可以设置控件,页面或整个程序的viewstate禁用


Cache:
1 输出缓存,把动态输出的页面保存到服务器的内存
<%@ OutputCache Duration="60" VaryByParam="None" %>
VaryByParam可以指定QueryString参数:VaryByParam="id;nm"
VaryByControl根据控件id缓存不同用户控件的版本:VaryByControl="dropdownlist1"
VaryByCustom自定缓存依据:VaryByCustom="browser" 根据不同类型的浏览器缓存页面
Shared="true":一个用户控件在多个页面存在,缓存用户控件的一个版本

2 客户端缓存
使用HttpCachePolicy类
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);

3 Cache API
using System.Web.Caching;
使用:
添加:Cache["DS"] = ds;
读取:ds = (DataSet)Cache["DS"];

缓存依赖:
Cache.Insert("index", obj, new CacheDependency(Server.MapPath("a.xml")));
Cache.Insert("index", obj, new SqlCacheDependency("Northwind", "Employees"));

缓存过期:
Cache.Add("index", obj, null, DateTime.Now.AddSeconds(11), TimeSpan.Zero);

缓存回调:
Cache.Add("index", obj, null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Default, new CacheItemRemovedCallback(Fun));

posted on 2010-08-02 12:45  饶兴  阅读(149)  评论(0编辑  收藏  举报

导航