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

作者:杭州车成汽车事务代理服务部 来源:www.guohuicar.com 发布时间:2017-09-07 13:30:49
[Asp.Net]状态管理(Session、Application、Cache) 服务器端的状态管理

Session

会话状态与浏览器会话相关。客户在服务器上第一次打开Asp.Net页面时,会话就开始了。当客户在20分钟之内没有访问服务器,会话结束,销毁session。

可以在Global Application类(即全局应用程序类)中定义自己的代码,会话开始或结束时运行。会创建Global.asax文件。在这个文件中,定义了一些时间处理程序例程:

View Code

会话状态可以存储在HttpSessionState对象中。与当前Http环境相关的会话状态对象可以使用Page类的Session属性来访问。在Session_Start()事件处理程序中,可以初始化会话变量。在下面的实例中,名为mydata的会话状态被初始化为0:

1 protected void Session_Start(object sender, EventArgs e)

2 {

3 Session["mydata"] = 0;

4 }

可以在页面中通过使用会话状态名读取会话状态。

1 protected void Unnamed2_Click(object sender, EventArgs e)

2 {

3 int val = (int)Session["mydata"];

4 myLabel.Text = val.ToString();

5 val += 5;

6 Session["mydata"] = val;

7 }

要把客户端与其会话变量关联起来,ASP.NET默认使用一个临时cookie和一个会话标识符(SessionId)。Asp.Net也支持没有cookie的会话,其中的URL标识符用于把Http请求映射到同一个会话。

Session的销毁:

Session.Abandon();//销毁服务器端的Session对象

Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁

Session常用属性、方法

属性描述

SessionID

唯一用户会话标识符

TimeOut

用户超时(单位:分钟),专题系统,默认20分钟

Count

会话状态集合中的项目数

方法

描述

Abandon方法

用于显式结束会话。

Session的作用 就像你的银行账户,钱(数据)都存在银行里,你就拿一张银行卡(包含SessionId)回家,你每次去银行取钱,只需要带着银行卡(包含SessionId)就可以了。银行就知道该将哪个账户的钱(数据)给你。而不是别人账户里的。每次取钱必须带着卡才行,所以浏览器的每次请求,也必须带着sessionid取数据。

Session总结

(之前笔记中摘录别人的一段,很容易理解,作者如果看到望指出,我将链接添加到文章中。)

Session提供了一种把信息保存在服务器内存中的一种方式。它能存储任何数据类型包括自定义对象。所以像Session["user"]的返回类型是object类型。根据你想要的类型,需要进行类型转换。

每个客户端的Session是独立存储(sessionid唯一标识)。

Session 对象用于存储有关用户的信息(比如在验证用户是否登录,此时可以通过判断Session[“user”]是否为null进行判断)。

在整个用户会话过程中都会保留此信息。(保存SessionId的cookie丢失之前)

当用户在应用程序中从一个网页浏览到另一个网页时,存储在 Session 对象中的变量不会被丢弃。(这里就感觉像全局变量了)

Session只可由该会话的用户访问(因为SessionId以cookie的方式保存访问者浏览器的缓存里,关闭浏览器就没了)

用户不能访问或修改他人的Session(sessionid唯一标识)

ASP.Net已经内置了Session机制。不要放太多的对象到Session(因为存储在服务器端的一个辅助进程里,不稳定,数据多了容易丢失。),Session会有超时销毁的机制。

Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session、Cookie)。

如果浏览器禁用了Cookie可以启用Url来传递SessionID。

可以看到Session机制并不是Http协议规定的,是ASP.net实现的,现在PHP、JSP等大部分服务端技术都实现了Session,原理都差不多。

Session有自动销毁机制(设置失效时间,默认就是滑动过期机制),如果一段时间内浏览器没有和服务器发生任何的交互,则Session会定时销毁。

注意:当会话过期或终止时,服务器就会清除 Session 对象

关于Sesiion的存储方式:http://www.cnblogs.com/zhangkai2237/archive/2012/03/22/2410890.html可以看这个文章写的不错。这里就不再赘述了。

2.Application

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

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

1 Void Application_Start(Object sender,EventArgs e)

2 {

3 Application["userCount"]=0;

4 }

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

还用取钱的例子打比方:Application的方式比较像去自动取款机取钱的模式,你进去取钱,需将门关上(Lock),你取完钱出来(Unlock),下一个人才能进去。这样更容易理解。

protected void Session_Start(object sender, EventArgs e)

{

Application.Lock();

Application["userCount"] = (int)Application["userCount"] + 1;

Application.UnLock();

}

读取应用程序状态中的数据与Session状态中的数据一样。

Label1.Text=Application["userCount"].ToString();

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

3.Cache

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:湖北网站建设 http://hubei.45qun.com

  • 上一篇:Python代理设置
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 杭州车成汽车事务代理服务部 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100