Application、Server和Session对象

(一)Application对象


                Application对象在服务器内存中存储数量较少又独立于用户请求的数据。它可以请求、连接直接共享共用信息,也可以在各个请求连接之间充当信息传递的管道。Application对象包含的数据可以被应用程序的所有用户使用,而且可以在网站运行期间持久保存。

    Application对象在实际网络开发中的用途,就是记录整个网络的信息,如上线人数,在线名单,意见调查和网上选举等。

    Global.asax(通常我们不改名)是一个用来处理应用程序全局的事件。打开文件,系统已经为我们定义了一些事件的处理方法。

void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
    }   

    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码
    }       

    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码
    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码
    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码

        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为InProc 时,才会引发 Session_End 事件

        // 如果会话模式设置为 StateServer 或 SQLServer,则不会引发该事件
    }

Application对象的应用


1.使用Application对象保存信息

    Application(“键名”)=值

或:Application(“键名”,值)


2.获取Application对象信息

    变量名=Application(“键名”)

或:变量名=Application.Item(“键名”)

或:变量名=Application.Get(“键名”)


3.更新Application对象的值

    Application.Set(“键名”,值)


4.删除一个键

    Application.Remove(“键名”,值)


5.删除所有键

    Application.RemoveAll()

或:Application.Clear()


有可能存在多个用户同时存取同一个Application对象的情况,这样多个用户修改同一个Application命名对象,造成数据不一致问题。HttpApplicationState类提供两种方法Lock和Unlock,以解决对Application对象的访问同步问题,一次只允许一个线程访问应用状态变量。


锁定:Application.Lock()

访问:Application(“键名”)=值

解锁:Application.Unlock()


利用Global.asax文件加Application对象实现简单的网站计数

Global.asax文件

  
    void Application_Start(object sender, EventArgs e)   
    {  
        // 在应用程序启动时运行的代码  
        Application["count"] = 0;//初始设置计数从0开始  
    }  
      
    void Application_End(object sender, EventArgs e)   
    {  
        //  在应用程序关闭时运行的代码  
  
    }  
          
    void Application_Error(object sender, EventArgs e)   
    {   
        // 在出现未处理的错误时运行的代码  
  
    }  
  
    void Session_Start(object sender, EventArgs e)   
    {  
        // 在新会话启动时运行的代码  
        Application.Lock();//同步,避免同时写入  
        Application["count"]=(int)Application["count"]+1;//没建立一个会话该全局变量加1  
        Application.UnLock();//同步结束  
  
    }  
  
    void Session_End(object sender, EventArgs e)   
    {  
        // 在会话结束时运行的代码。   
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。  
        // 如果会话模式设置为 StateServer   
        // 或 SQLServer,则不会引发该事件。  
  
    }  
         


页面代码

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
  
public partial class login : System.Web.UI.Page  
{  
    protected void Page_Load(object sender, EventArgs e)  
    {  
          
            Response.Write("欢迎光临!");  
            Response.Write("您是第");  
            Response.Write((int)Application["count"]);  
            Response.Write("个访问此网站的人!");  
          
    }       
}  


(二)Session对象


    Seeion对象负责存贮、读取和改变一个特定用户的会话信息。对于每个用户的每次访问Session对象是唯一的。对于某个用户的某次访问,Session对象在访问期间唯一,可以通过Session对象在页面间共享信息。只要Session没有超时,或者Abandon方法没有被调用,Session中的信息就不会丢失。对于用户的每次访问其Session都不同,两次访问之间也不能共享数据。 Session代表了服务器与客户端之间的“会话”。


特点:

1.不是线程安全的,应该避免多个线程共享同一个Session实例

2.Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源

3.Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。


Session与Application   

关系:

Application是全局变量,Session是会话变量。打开一个网站,Session就存在了,关闭网站Session就结束了,也就是一个会话结束了,这就是会话变量。但是不管前台有多少客户打开网站,关闭网站,只要服务器不关闭网站,Application就始终存在,这就是全局变量。

区别:

应用范围不同:Application是全局变量,Session是会话变量

存活时间不同:Application比Session存活时间长



(三)Server对象


Server对象获取当前请求的背后服务器对象的信息,提供了对服务器上的方法和属性的访问以及进行HTML编码的功能。

常用属性:

(1).MachineName
(2).ScriptTimeout:属性用于设置脚本程序执行的时间,适当地设置脚本程序的ScriptTimeout可以提高整个Web应用程序的效率。语法如下:
Server.ScriptTimeout=time;(以s(秒)为单位)

ScriptTimeout属性的最短时间默认为90 s。对于一些逻辑简单、活动内容较少的脚本程序该值已经足够。但在执行一些活动内容较多的脚本程序时,就显得小了些。比如访问数据库的脚本程序,必须设置较大的ScriptTimeout属性值,否则脚本程序就不能正常执行完毕。

<span style="font-size:24px;">Response.Write("服务器机器名:" + Server.MachineName);//服务器机器名:IBM 
Response.Write("超时时间为:" + Server.ScriptTimeout);//超时时间为:30000000</span>


总结:ASP.NET提供的内置对象不仅只有这三个,还有Page、Request、Response、Mail和Cookies。不断学习中...

评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值