(一)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。不断学习中...