ASP.NET内置对象之Application 与Session对比

名词解释:

ASP.NET应用程序:单个Web服务器上某一个虚拟目录及其子目录范围内所有文件,页,处理程序,模块,代码的总和

 

 

 

Application对象是一个用于存储全局变量的容器,其实它只是一个对象,但是为了说明的更加生动,我们可以把它比喻成一个容器,而ASP.NET应用程序里面变量,也就是容器里面的内容。ASP.NET应用程序是单个Web服务器上某一个虚拟目录及其子目录范围内所有文件,页,处理程序,模块,代码的总和。可以在整个应用程序范围之内存储一些信息,我们可以用变量来存储。但是有一个问题,那就是变量的整个生命周期受限于网页,也就是说每一次ASP.NET文件被执行完毕(Web服务器端发送代码到客户端后),变量的内容便被释放。很多时候,我们又需要保留这个内容,比如聊天室,每次刷新后,网页的内容仍然要存在,这就需要用Application来存储。Application对象是最佳的选择,利用Application对象存储的变量和对象在整个应用程序内执行所有ASP.NET页面都是可用的。Application对象中存储的是全局变量,这些变量占用了很大一部分内存资源,在这个变量没有被删除后被替代之前,资源是不会被释放的。

Session对象和Application完全不同。Application对象存储信息是整个应用程序所共享的全局信息,每一个客户都能够访问到相同的信息,它是针对整个应用程序的,并且整个程序里面的每一个用户.但是Session对象的作用是在服务器端存储特定的信息,它的信息是局部的,是针对于特定的一个用户,Session中的信息也称为会话状态。我们可以用一个例子来说明Session的使用。比如设计一个论坛,众所周知,我们进入论坛,需要提交用户名和密码,然后我们发帖子,留言等都不需要再用用户名和密码了,这是因为我们已经保留了这些信息。我们在登陆成功后,已经把用户名和密码等信息存放进了Session,然后将信息返回到服务器,当转到下一个页面的时候,再从服务器取出信息使用。我们留言,发帖子的时候,就直接从 Web服务器的Session中取出用户名和密码来判断我们是否有权利这么做。

ApplicationSession对象设计到了Global.asax文件的使用,下面我们来分析一下Global.asax文件。Application对象是由System.Web.HttpApplicationState类来实现的,Session是由System.Web.SessionState.HttpSessionState类实现的,对应于浏览器和服务器的一次会话。Global.asax是一种可选文件,你可以删除它。Global.asax 位于应用程序根目录下。虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件。删除它不会出问题——当然是在你没有使用它的情况下。.asax 文件扩展名指出它是一个应用程序文件,而不是一个使用 aspx ASP.NET 文件。

 

 

说到了ApplicationSession,我们就用聊天室和论坛的登陆作为两个具体的实例来简单说明一下。

 

首先是聊天室的制作:这是一个简易的聊天室,界面很简单,在页面的下半部分显示显示用户名和聊天内容,上半部分则显示大家一起聊天的内容和日期。用的是Application的全局变量来存储信息。

1.VISUAL C#.NET 2005新建一个ASP.NET网站,命名为send.aspx,用来实现发送信息的功能。然后新建一个全局用用程序类,也就是Gloval.asax,然后输入一下代码:

<%@ Application Language="C#" %>

 

<script runat="server">

 

void Application_Start(object sender, EventArgs e)

{

// 在应用程序启动时运行的代码

string chatcontent;

Application["chatcontent"] = "<h2>欢迎来到KINGSTONE聊天室!</h2>";

 

}

 

void Application_End(object sender, EventArgs e)

{

//  在应用程序关闭时运行的代码

Application.RemoveAll();

 

}

 

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,则不会引发该事件。

 

}

 

</script>

2.设计send.aspx,就自己设计聊天页面了,不够我是按照以前老版本的QQ的聊天室的页面来设计的。在send.aspx中发送的Click事件处理程序中,添加一下代码:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        string message;

 

        message = "<font color='blue'>" + this.sender.Text + "</font>说:";

 

        message += this.content.Text;

 

        message += "(<i>" + DateTime.Now.ToString()+"</i>)";

 

        message += "<br>";

 

        Application.Lock();

 

        Application["chatcontent"] = (string)Application["chatcontent"] + message;

 

        Application.UnLock();

 

        this.content.Text = "";

    }

}

 

 

3.添加一个Web窗体,命名为main.aspx,用来实现显示聊天内容,设计页面,这个页面最主要的是实现刷新,添加代码到<meta http-equiv="refresh" content="1"; />源中,然后在main.aspx.cs中添加

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class main : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        this.chatmessage.Text = (string)Application["chatcontent"];

    }

}

 

 

4.添加一个HTML页,重命名为chat.htm.这个HTML页面主要用HTML语言来编写,需要实现framset框架,将一个页面分为上下两个部分的框架,上面连接main.aspx,下面连接send.aspx.代码主要为:

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

    <title>KINGSTONE聊天室欢迎你</title>

    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.1" />

</head>

 

<frameset rows="80%,20%">

 

<frame src="main.aspx">

</frame>

 

<frame src="send.aspx" noresize>

</frame>

 

</frameset>

<body>

 

</body>

</html>

这样一个聊天室页就做成了,大家就可以聊天了。它的主要原理在于Application存储信息,当用户发送消息后,它将数据从客户端传送到了服务端,然后储存在Application这个“容器”中,当刷新后,main.aspx里面的对象又调用容器里面的内容,于是又被调出来,然后送到客户端。

 

 

 

然后是Session的用运,上面页说过,这个例子就是论坛的登陆。这个主要是关于用户权限的检查。

大体介绍一下,因为这个比较简单,所以没有必要多说。

主要有三个界面,一个是登陆界面,一个是管理员登陆界面,还有一个是管理界面。

管理界面代码:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (Session["username"] != null && Session["userpwd"] != null)

        {

            string username = Session["username"].ToString();

            string userpwd = Session["userpwd"].ToString();

            if (username != "kingstone" && userpwd != "123")

            {

                Response.Redirect("login.aspx", true);

            }

        }

        else

        {

            Response.Redirect("login",true);

        }

    }

}

 

 

 

 

登陆界面是:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class login : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        string strno = "用户名或者密码不正确!";

        if (username.Text == "kingstone" && userpwd.Text == "123")

        {

            Session["username"] = username.Text;

            Session["userpwd"] = userpwd.Text;

            Response.Redirect("admin.aspx");

        }

        else

        {

            Page.RegisterClientScriptBlock("loginno", strno);

        }

    }

}

 

这就是一个简易的登陆界面了。

 

 

最后想说说我对这两个的感想,以前看了很多书,做了一些设计,但是没有真正总结过Application Session对象,感觉知识是散的,到自己用的时候又去回忆。现在按照自己对看的书的总结,对两个对象有了更加深刻的理解,不过应该还是有很多地方没有理解到位,但是至少是比以前熟悉了,对ASP.NET几个的内置对象应该还是比较了解了,如Page,Application,Session,Response,Request,Cookies

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值