Response对象
Response对象主要用于将数据从服务器发送回浏览器。
2、Response对象的常用属性及说明
属性
说明
Buffer
获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个相应之后将其发送。
Cache
获取Web页的缓存策略,如过去时间、保密性、变化字句等。
Charset
设定或获取HTTP的输出字符编码
Expires
获取或设置在浏览器上缓存的页过期之前的分钟数
BufferOutput
获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送。
Cookies
获取当前请求的Cookie集合。
IsClientConnected
传回客户端是否仍然和Server连接
SuppressContent
设定是否将HTTP的内容发送至客户端浏览器。若为true,则网页将不会传至客户端。
BufferOutput属性
该属性用于获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送。语法如下:
Public bool BufferOutput{get;set;}
数型值:如果缓冲了到客户端的输出,则为true;否则为False。默认为True。
protected void Page_Load(object sender, EventArgs e) {
Response.BufferOutput = true;
Response.Write("测试");
}
IsClientConnected属性
该属性用于获取一个值,通过该值指示客户端是否仍连接在服务器上。
语法如下:public bool IsClientConnected{get;}
属性值:如果客户端当前仍在连接,则为true,否则为false。例:
protected void Page_Load(object sender, EventArgs e)
{
if (Response.IsClientConnected)
Response.Redirect("WebForm1.aspx");
else
Response.End();
}
Response常用的方法及说明
AddHeader
将一个HTTP头添加到输出流
AppendToLog
将自定义日志信息添加到IIS日志文件。
Clear
将缓冲区的内容清除。
End
将目前缓冲区中所有的内容发送至客户端,然后关闭。
Flush
将缓冲区所有的数据发送至客户端。
Redirect
将网页重新导向另一地址。
Write
将数据输出到客户端
WriteFile
将制定的文件直接写入HTTP输出流
Redirect方法 该方法用于将网页重新导向另一个地址。语法如下:
Public void Redirect(string url)
参数url:客户端用来定位请求资源的URL
说明:在构建Web页面时,需要用户导向另外一个页面。例如,用户查询资料时就需要跳转,这时可以使用Page类的Redirect属性中的一个对象Redirect帮助完成工作。
例:用户从登陆页面进入网站主页时,输入合法的用户名和密码之后,通过调用Response对象的Redirect方法就可以跳转到网站主页面。代码如下:Response.Redirect(“Index.aspx”);
(2)Write方法
该方法用于将数据输出到客户端,语法如下:Response.Write(“输出字符串”);
例:<head runat=”Server”>
<title>Response test</title>
</head>
<body>
<%
For ( int i=0;i<50;i++){ Response.Write(“X”);}
%>
</body>
(3)WriteFile方法
该方法用于将指定的文件直接写入HTTP输出流。语法如下:public void WriteFile(string filename);参数filename:要写入HTTP输出的文件名。例:
Response.WriteFile(Server.MapPath(@”TextFile.txt”);
Request对象
Request对象,可称为请求对象。该对象是HttpRequest类的一个实例,用于提供当前页请求访问,其中包括标题、CooKie、查询字符串等,用户可以使用此类来读取浏览器已经发送的内容。当用户打开浏览器,并从网站请求web页时,Web服务器就会收到一个请求,其中包含用户、用户的计算机、页面以及浏览器的相关信息,这些信息将被完整的封装,并在Request对象中利用他们。以上这些信息都是通过Request对象一次性提供的。
Request对象的常用属性及说明
ApplicationPath
获取服务器上ASP.NET应用程序虚拟应用程序的根目录路径
Browser
获取或设置有关正在请求的客户端浏览器的功能信息
ContentLength
指定客户端发送的内容长度(以字节计)
Cookies
获取客户端发送的Cookie集合
FilePath
获取当前请求的虚拟路径
Files
获取客户端上载的文件集合
Form
获取窗体变量的集合
Item
从Cookies、Form、QueryString或ServerVariables集合获取指定的对象
Params
获取QueryString、Form、ServerVariables和Cookies项的组合集合
Path
获取当前请求的虚拟路径
QueryString
获取HTTP查询字符串变量集合
UserHostAddress
获取远程客户端IP主机地址
UserHostName
获取远程客户端DNS名称
Browser属性 该属性用于获取或设置有关正在请求的客户端浏览器的信息。语法如下:public HttpBrowserCapabilies Browser{get;set;}
属性值:列出客户端浏览器功能的HttpBrowserCapabilities对象。例:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("浏览器使用的平台:"+Request.Browser.Platform+"<br>"+"浏览器类型:"+Request.Browser.Type+"<br>"+"浏览器版本:"+Request.Browser.Version);
}
QueryString属性
该属性用于获取HTTP查询字符串变量的集合、
语法如下:public NameValueCollection QueryString{get;}
属性值:NameValueCollection,包含由客户端发送的查询字符串变量的集合。
Request对象的常用的方法及说明
方法
说明
MapPath
将当前请求的URL中的虚拟路径映射到服务器上的物理路径
SaveAs
将HTTP请求保存到磁盘
MapPath方法
该方法用于接收一个字符串类型的参数,并返回当前文件所在的实际路径。该方法主要应用在需要使用实际路径的位置。例如,建立数据源连接是,必须制定完整的路径,这是就可以使用MapPath方法将其取回。语法如下:
Public string MapPath(string virtualPath)
参数virtualPath:当前请求的虚拟路径(绝对路径或相对路径)。
返回值:由virtualPath指定的服务器物理路径。
例如,下面的代码用来取得页面Default.aspx的物理路径。
String str=Request.MapPath(“Default.aspx”);
(2)SaveAs方法
该方法用于将HTTP请求保存到硬盘上,在调试过程中非常有用。
语法如下:
Public void SaveAs(string filename.bool includeHeaders)
参数说明:filename:物理驱动器路径。
IncludeHeaders:一个布尔值,该值指定是否将HTTP头保存到磁盘。例:
protected void Page_Load(object sender, EventArgs e)
{
Request.SaveAs(Server.MapPath("TextFile1.txt"), true);
}
Response应用
例:当程序运行时,在页面Default.aspx中的TestBox文本框输入一个值,单击搜索按钮,将Testbox文本框中的值传到WebForm1.aspx页面的地址栏中。
主要代码:
1、Default.aspx
protected void btnSearch_Click(object sender, EventArgs e)
{
Response.Redirect("WebForm1.aspx?id=" + txt.Text);
}
2、WebForm1.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("地址栏传值id为:" + Request.QueryString["id"]);
}
Application对象
Application对象,可称之为记录应用程序参数的对象,主要用于共享应用程序集信息。Application对象用于共享应用程序集信息,即多个用户共享一个Application对象。在第一个用户请求ASP.NET文件时,将启动应用程序并创建Application对象。一旦Application对象被创建,它就可以共享和管理整个应用程序的信息。在应用程序关闭之前,Application对象将一直存在。所以,Application对象是用于启动和管理ASP.NET应用程序的主要对象。
Application对象的常用属性及说明
属性
说明
AllKeys
返回全部Application对象变量名到一个字符串数组中
Count
获取Application对象变量的数量
Item
允许使用索引或Application变量名传回内容值。
Count属性 该属性用于获取Application对象变量的数量
语法如下:public override int Count{get;}属性值:集合中的Item对象数,默认值为0。例:
protected void Page_Load(object sender, EventArgs e)
{
Application["app1"] = "app1";
Application["app2"] = "app2";
Response.Write("Application对象的数量为:" + Application.Count);
}
Item属性 该属性可以重载,有两种格式,分别通过索引和名称来获取单个Application对象的值。语法如下:
Public Object this[int index]{get;}//index集合中对象的数字索引
Public Object this [string name]{get;set;}//集合中的对象名
例:
protected void Page_Load(object sender, EventArgs e)
{
Application["app1"] = "app1";
Application["app2"] = "app2";
Response.Write(Application["app1"].ToString());
Response.Write(Application[1].ToString());
}
Application对象的常用方法及说明
方法
说明
Add
新增一个Application对象变量
Clear
清除全部Application对象变量
Lock
锁定全部Application对象变量
Remove
使用变量名移除一个Application对象变量
RemoveAll
移除全部Application对象变量
UnLock
解除锁定的Application对象变量
Add方法 该方法用于将新变量添加到Application集合中。语法如下:
Public void Add(string name,Object value);
参数说明: name:要添加到Application对象中的变量名。Value:变量的值。例:
Application.Add(“mr”,”mr”); Application.Add(“mrsoft”,”mrsoft”);
(2) Lock方法 该方法用于锁定全部的Application对象变量。语法如下:
Public void Lock();
例如:统计在线人数时,就应该先对Application对象家锁,以防止因为多个用户同时方位页面而造成并行。常用格式如下:
Application.Lock();Application(“变量”)=”表达式”;Application.UnLock();
说明:Lock方法可以阻止其他用户修改存储在Application对象中的变量,以确保在同一时刻仅有一个用户可以修改和存取Application变量。如果用户没有明确使用Unlock方法,则服务器将在页面文件结束或超出时即解除对Application对象的锁定。Unlock方法可以使其他客户端使用Lock方法锁住Application对象后,修改存储在该对象中的变量。如果未显式地调用该方法,Web服务器将在页面文件结束或超出后解锁Application对象。
Remove方法 该方法用于指定变量从Application集合中移除。语法如下:
Public void Remove(string name)
参数Name:要从Application对象中移除的变量名。
例如:下面的代码将mr的应用程序变量从Application集合中移除。
Application.Remove(“mr”);
如果压移除Application集合中所有变量,可以直接调用其RemoveAll方法。代码如下:Application.RemoveAll();
Application对象常用的事件
Application_Start事件,在首次创建新的会话之前发生,只有Application和Server内置对象可使用。在Application_Start事件中引用Session、Request
或Response对象将导致错误。由于Application对象是多用户共享的,因此它与Session对象有着本质的区别;同时Application 对象不会因为一个甚至全部用户离开而消失,一旦建立了Application对象,他就会一直存在直到网站关闭或者该Application对象被卸载,这通常需要很长时间。由于Application对象创建之后不会自己注销,因此一定要特别小心地使用。另外,它会占用内存,要避免降低服务器对其他工作的相应速度。中止Application对象有3中方法,分别为服务被终止,Global.asax文件被改变或者该Application对象被卸载。例:
protected void Application_Start(object sender, EventArgs e)
{
Application["Name"] = "sgusauyfdsg";
}
Application_End事件 在应用程序退出时用于Session_End事件之后发生,只有Application和Server内置对象可使用。Application_End事件只有在服务中止或者Application对象卸载时才会触发。如果单独使用Application对象,该事件可以通过Application对象再利用Unload事件卸载时进行触发。一个Application_End事件肯定发生在Session事件之后。Application_End事件触发唯一一个脚本程序,它存在于Global.asax文件中。注:若果希望服务中止或者Application对象卸载时执行某些操作,可以在Application_End事件中编写相应的代码。
Session对象
Session对象用来存储跨网页程序的变量或者对象。该对象只对单一网页使用者,也就是服务器会为连接的客户端分配各自的Session对象,不同的客户端无法相互存取。当超过设置的有效时间时,Session对象就会消失。与Application对象一样,Session对象也是Page对象的成员,因此可直接在网页中使用。使用Session对象存放信息的语法如下:
Session[“变量名”]=“内容”;
Session对象常用的属性及说明
属性
说明
Contents
获取对当前会话状态对象的引用
Item
获取或设置会话值
TimeOut
设置Session对象的有效时间,默认值为20分钟
Contents属性 获取当前会话状态对象的引用。语法如下:
Public HttpSessionState Contents{get;}
属性值:当前的HttpSessionState
例:
protected void Page_Load(object sender, EventArgs e)
{
Session["id1"] = "id1e";
Session["id2"] = "isd2";
foreach (string str in Session.Contents)
{
Response.Write(Session[str].ToString());
Response.Write("<br/>");
}
}
(2)TimeOut属性
该属性用于获取并设置在会话状态提供程序终止会话之前各请求之间所允许的时间(以分钟为单位)。
语法:public int TimeOut{get;set;}
属性值:超时时限(以分钟为单位)
注:更改Timeout属性的值也可以在Web.Config中,使用sessionSate配置元素的timeout属性来设置Timeout属性,也可以使用程序代码直接设置Timeout属性值。Timeout属性不能超过525600(1年)的值。
例: <sessionState mode="InProc" timeout="30">
Session对象常用的方法
属性
说明
Abandon
结束当前会话,并清除会话中的所有信息。
Add
用于向Session对象集合中添加一个新项
CopyTo
将会话状态值的集合复制到一维数组中
Clear
清除全部的Session对象变量,但不结束会话
Clear 该方法用于清除全部Session对象变量。
语法如下:public void Clear()
例:Session.Clear();
Add 该方法用于向Session对象集合中添加一个新项。
语法如下:public void Add(string name,Object value);
参数说明:name 要添加到Session对象集合中的名称
Value要添加到Session对象集合中的项的值。
例:Session.Add(“test”,”test文本”);
Session对象应用:Session对象的用途有很多,如存储变量,判断用户是否登录等。例:
(1)登录页面
代码:
protected void btnLogin_Click(object sender, EventArgs e)
{
if (txtName.Text == "mr" && txtPwd.Text == "mrsoft")
{//使用Session变量记录用户名
Session["UserName"] = txtName.Text;
//使用Session变量记录用户登录系统的时间 Session["TimeLogin"] = DateTime.Now;
Response.Redirect("~/UserPage.aspx");//跳转到主页
}
else
{
Response.Write("<script>alert('登录失败!请返回查找原因');location='Login.aspx'</script>");
}
}
(2)Session对象记录用户登录名及登录时间
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("欢迎用户" + Session["UserName"].ToString() + "登录本系统!<br>");
Response.Write("您登录的时间为:" + Session["TimeLogin"].ToString());
}
CooKie对象
Cookie对象用于保存客户端浏览请求的服务器页面,也可用它放非敏感信息,信息保存的时间可以根据用户的需要进行设置。并非所有的浏览器支持Cookie,并且数据信息以文本形式保存在客户端计算机中。
Cookie对象常用的属性及说明
属性
说明
Clear
清除所有的Cookie
Expires
设定Cookie变量的有效时间,默认为100分钟,若设置为0,则实时删除Cookie变量。
Name
取得Cookie变量的名称
Value
获取或设置Cookie变量的内容值
Path
设置与当前Cookie一起传输的虚拟路径
Expires属性 该属性用于设置Cookie对象的两个常用属性。语法如下:
Public Datatime Expires{get;set;}
属性值:Cookie的过去时间(在客户端)
例: protected void Page_Load(object sender, EventArgs e)
{
HttpCookie cookie = new HttpCookie("UserName");
cookie.Value = "明日科技";
cookie.Expires = DateTime.Now.AddMinutes(20);
}
Path属性 用于设置与当前Cookie一起传输的虚拟路径
语法如下:public string Path{get; set;}
属性值:要与前Cookie一起传输的虚拟路径。默认为当前请求的路径。例:
HttpCookie cookie = new HttpCookie("UserName");
cookie.Value = "明日科技";
cookie.Expires = DateTime.Now.AddMinutes(20);
Response.Cookies.Add(cookie);
Response.Write(Request.Cookies["UserName"].Path);
Cookie对象的常用的方法及说明
方法
说明
Equals
确定指定Cookie是否等于当前的Cookie
ToString
返回此Cookie对象的一个字符串表示形式
ToString方法 表示当前Object 的String。语法如下:
Public virtual string ToString()
返回值:string,表示当前的Object
Equals方法 用于确定指定的Object是否等于当前的Object。语法如下:
Public virtual bool Equals(Object obj)
返回值:如果指定的Object等于当前的Object,则为true,否则为false
例:protected void Page_Load(object sender, EventArgs e)
{
//声明一个HttpCookie实例cookie1
HttpCookie cookie1 = new HttpCookie("userName1");
cookie1.Value = "明日科技"; //赋值给cookie1
//声明一个HttpCookie实例cookie1
HttpCookie cookie2 = new HttpCookie("UserName2");
cookie2.Value = "明日科技"; //赋值给cookie1
Response.Cookies.Add(cookie1); //添加cookie1
Response.Cookies.Add(cookie2); //添加cookie2
if(Equals(Request.Cookies["userName1"].Value, Request.Cookies["userName2"].Value))
Response.Write("Cookie值相等"); //两个Cookie对象的值是否相等
else
Response.Write("Cookie值不相等");
}
Server对象
Sever对象定义了一个与Web服务器相关的类,用于访问指定服务器上的资源。
Server对象的常见属性及说明
属性
说明
MachineName
获取服务器的计算机名称
ScriptTimeout
获取或设置请求超时值(以秒计)
MachineName属性 该属性用于获取服务器的计算机名称。语法如下:
Public string MachineName{get;}
属性值:本地计算机的名称
例:Response.Write(Server.MachineName.ToString());
ScriptTimeout 该属性用于获取或设置请求超时值。语法如下:
Public int ScriptTimeout{get;set;}
属性值:请求超时值设置
Server对象常用的方法及说明
方法
说明
HtmlDecode
对已被编码以消除无效HTML字符的字符串进行编码
HtmlEnCode
对要在浏览器中显示的字符串进行编码
MapPath
返回与Web服务器上的指定虚拟路径相对应的物理文件路径
UrlDecode
对字符串进行编码,该字符串为了进行HTTP传输而进行编码并在URL中发到服务器
UrlEncode
编码字符串,以便通过URL从Web服务器到客户端进行可靠的HTTP传输
MapPath方法 用于返回与Web服务器上的指定虚拟路径相对的物理文件路径。语法如下:public string MapPath(string path)
参数path: web服务器的虚拟路径
例:Response.Write(Server.MapPath("Default.aspx"));
HtmlEncode方法 用于对字符串进行HTML编码,并返回已编码的字符串。语法如下:public string HtmlEncode(string s)
例:Server.HtmlEncode(“<B>浏览器中字符串</B>”+”<br/>”);
//结果:<B>浏览器中字符串</B>
HtmlDecode方法 用于字符串进行HTML编码并返回已编码的字符串
语法如下:public string HtmlDecode(string s)
参数:s 要舅妈的HTML字符串
例:Server.HtmlEncode(“<B>浏览器中字符串</B>”+”<br/>”);//结果:浏览器中字符串
综合应用:
例1,统计IP地址的登录次数
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
int lastVisitCounter;
if (Request.Cookies["lastVisitCounter"] == null)
lastVisitCounter = 0;
else
lastVisitCounter = int.Parse(Request.Cookies["lastVisitCounter"].Value);
lastVisitCounter++;
HttpCookie aCookie = new HttpCookie("lastVisitCounter");
aCookie.Value = lastVisitCounter.ToString();
aCookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(aCookie);
txtSum.Text = lastVisitCounter.ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Request.Cookies["lastVisitCounter"] == null)
txtSum.Text = "1";
else
{
HttpCookie aCookie = Request.Cookies["lastVisitCounter"];
txtSum.Text = Server.HtmlEncode(aCookie.Value);
}
}
例2、获取浏览器的信息
protected void Page_Load(object sender, EventArgs e)
{
//获取浏览器的平台、类型和版本信息
lblinfo.Text = "浏览器使用的平台:" + Request.Browser.Platform + "<br>"
+ "浏览器类型:" + Request.Browser.Type + "<br>" + "浏览器版本:"
+ Request.Browser.Version;
}
例3、输出文本文件的内容
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
StreamReader sr = File.OpenText(Server.MapPath("桃花仙人.txt"));
string rl;
while ((rl = sr.ReadLine()) != null)
{
Response.Write(rl+"<br>");
}
sr.Close();
}
}
例4、创建一个网站,使用Response对象的Redirect方法实现页面跳转并传递参数。
Default.aspx页面
protected void Button1_Click(object sender, EventArgs e)
{
//获取用户名和密码
string name = txtUserName.Text.Trim();
string pwd = txtPwd.Text.Trim();
string strsql = "select count(1) from tb_user where userName='" + name + "' and userPwd='" + pwd + "'";
SqlConnection conn =new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["conn"].ToString());
conn.Open();
SqlCommand cmd = new SqlCommand(strsql, conn);
int flag = int.Parse(cmd.ExecuteScalar().ToString());
conn.Close();
if (flag > 0)
{
Session["users"] = name;
Response.Redirect("admin.aspx");
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), "", "alert('用户名或密码错误');", true);
}
}
Admin.aspx
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["users"] != null)
{
lblinfo.Text = "恭喜你,登录成功";
}
}
}
例5、验证码
起始页Default2.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Default.aspx"/>
<br />
请输入正确的验证码:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="确定" οnclick="Button1_Click" />
</div>
</form>
</body>
</html>
protected void Button1_Click(object sender, EventArgs e)
{
string checkCode = Request.Cookies["CheckCode"].Value.ToString().ToLower();
if (checkCode.Equals(TextBox1.Text.ToLower()))
{
Response.Write("<Script>alert('验证码输入正确')</Script>");
}
}
Default.aspx后台代码
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
Random random = new Random();
for (int i = 0; i < 4; i++)
{
number = random.Next();
if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26));
checkCode += code.ToString();
}
HttpCookie cookie = new HttpCookie("CheckCode", checkCode);
cookie.Expires = DateTime.Now.AddSeconds(30);
Response.Cookies.Add(cookie);
return checkCode;
}
protected void Page_Load(object sender, EventArgs e)
{
string checkCode = GenerateCheckCode();
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 20.5)), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = 0; i < 2; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //画图片的边框线
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
例6、统计网站的访问量
Default.asp前台代码
<table align="center" cellpadding="0" cellspacing="0" class="style1">
<tr>
<td>
<table align="center" cellpadding="0" cellspacing="0" class="style2">
<tr>
<td class="style3">
</td>
<td>
</td>
</tr>
<tr>
<td class="style3">
</td>
<td>
</td>
</tr>
<tr>
<td class="style3">
</td>
<td>
您是第<%=Application["counter"]%>位访问者 </td>
</tr>
</table>
</td>
</tr>
</table>
Global.aspx代码
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{// 在应用程序启动时运行的代码
int count = 0;
System.IO.StreamReader srd;
string file_path = Server.MapPath("counter.txt"); //取得文件的实际路径
srd = System.IO.File.OpenText(file_path); //打开文件进行读取
while (srd.Peek() != -1)
{
string str = srd.ReadLine();
count = int.Parse(str);
}
srd.Close();
object obj = count;
Application["counter"] = obj; //将从文件中读取的网站访问量存放在Application对象中
}
void Application_End(object sender, EventArgs e)
{// 在应用程序关闭时运行的代码
int Stat = 0;
Stat = (int)Application["counter"];
string file_path = Server.MapPath("counter.txt");
System.IO.StreamWriter srw = new System.IO.StreamWriter(file_path, false);
srw.WriteLine(Stat);
srw.Close();
}
void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码
}
void Session_Start(object sender, EventArgs e)
{// 在新会话启动时运行的代码
Application.Lock();
int Stat = 0;
Stat = (int)Application["counter"]; //获取Application对象中保存的网站总访问量
Stat += 1; //数据累加
object obj = Stat;
Application["counter"] = obj;
string file_path = Server.MapPath("counter.txt");//将数据记录写入文件
System.IO.StreamWriter srw = new System.IO.StreamWriter(file_path, false);
srw.WriteLine(Stat);
srw.Close();
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
}
</script>
例7、统计当前在线人数。当新用户访问网站时,会触发Session_Start事件,当用户有效期失效时,会触发Session——End事件。所以在这两个事件统计在线人数是比较科学的。
Default.aspx前台代码
<table align="center" cellpadding="0" cellspacing="0" class="style1"
style="background-image: url('网站在线访问人数统计.png')">
<tr>
<td>
<table align="center" cellpadding="0" cellspacing="0" class="style2">
<tr>
<td>
</td>
<td>
<asp:Label ID="lblCount" runat="server"></asp:Label>
</td>
</tr>
</table>
</td>
</tr>
</table>
Default.aspx后台代码
protected void Page_Load(object sender, EventArgs e)
{
lblCount.Text="您是第" + Application["count"].ToString() + "位访客";
}
Global.asax文件代码
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{// 在应用程序启动时运行的代码
Application["count"] = 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;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{ //在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
</script>