在上个博文中,我们学习了Response、Request和Server对象,通过对这三个对象的学习,我们初步了解了在ASP.NET中是如何在两个页面中进行传值的。
如上图所示,如果两个页面可以通过跳转进行访问,我们可以用地址栏传值或者Form表单传值来进行数值传递。
在实际项目中并不是每个页面之间都会有链接的,比如在登录模块中,用户在登录页面输入信息,之后在其他页面中要知道当前用户的信息,它们之间没有链接关系,在这种情况下,一般采用Application、Session和Cookie来进行数值的传递。
今天,我们来学习Application、Session和Cookie这三个对象的使用
一、 Application对象的使用
1、概念
Application对象是内置的ASP.NET对象,Application状态由HttpApplicationState类表示,它包含了所有与应用程序相关的方法和集合。
创建一个Application对象后,它就可以在整个程序中使用, Application对象持续到应用程序关闭。
使用的语法为:
object[varName]=value;
其中,object可以是Application或Session,varName是变量的名称。例如:
Application[“greeting”]=”欢迎访问我们的站点”;
Global.asax文件也称为ASP.NET应用程序文件,它是一个用于配置应用程序的设置文件,它主要负责处理Application_Start、Application_End、Session_Start、Session_End等事件
事件 |
说明 |
Application_Start |
调用当前应用程序目录(或其子目录)下的第一个 ASP.NET 页面时触发。 |
Application_End |
应用程序的最后一个会话结束时触发。用 Internet 服务管理器管理单元停止 Web 应用程序时也会触发 |
Application_BeginRequest |
每次页面请求开始时触发(理想情况下是在页面加载或刷新时) |
Application_EndRequest |
每次页面请求结束时(即每次在浏览器上执行页面时)触发 |
Session_Start |
每次新的会话开始时触发 |
Session_End |
会话结束时触发。(关于会话可以采用何种方式结束,请参见会话对象) |
Lock和Unlock方法
如果访问量非常大,可能出现多个用户更改同一个Application对象的值,这可能导致混乱。
采用Application对象的Lock()和UnLock()方法进行锁定和解锁
Lock() 用于防止用户更改 Application 对象的属性
Unlock() 方法用于释放对应用程序变量的锁定
2、示例
利用Application实现留言功能
1、 添加一个Global.asax文件,并在Application_Start和Application_End事件中添加清空留言信息的代码:
protected void Application_Start(object sender, EventArgs e) { Application.Lock(); Application["message"] = string.Empty; Application.UnLock(); }
protected void Application_End(object sender, EventArgs e) { Application.Lock(); Application["message"] = string.Empty; Application.UnLock(); }
2、 如下图在页面中添加文本框和按钮:
<asp:Timer ID="Timer1" runat="server" Interval="5000" ontick="Timer1_Tick"> </asp:Timer> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox> <br /> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="发送" onclick="Button1_Click" Width="60px" />
3、添加发送按钮的点击事件处理:
protected void Button1_Click(object sender, EventArgs e) { Application.Lock(); Application["message"] += Request.UserHostAddress + "说:" + TextBox2.Text + Environment.NewLine; TextBox1.Text = Server.HtmlEncode(Application["message"].ToString()); Application.UnLock(); } protected void Timer1_Tick(object sender, EventArgs e) { TextBox1.Text = Server.HtmlEncode(Application["message"].ToString()); }
小结:Application的基本概念和使用方法,其基本原理为:当第一个用户请求一个ASP.NET文件时,会启动应用程序并创建一个Application对像,在创建Application对象后,它就可以在整个程序中使用,创建的对象将持续到应用程序关闭。
通常情况下Application结合Global.asax文件一起使用,它是一个用户配置应用程序的设置文件,它主要负责处理Application_Start、Application_End、Session_Start、Session_End等事件。应用程序开始运行时,就会触发Application_Start事件,对于每个访问应用程序的用户,会触发Session_Start事件启动单独的会话,当用户从应用程序推出时会触发该用户的Session_End事件来结束会话。应用程序完全关闭时会触发Application_End事件。
如果页面访问量非常大,则可能出现多个用户同时更改一个Application值的情况,这可能会导致混乱。因此,要确保应用程序的变量不会同时被多个用户更新,我们采用Application对象的Lock()和UnLock()方法进行锁定和解锁。
二、Cookie对象
1、概念
在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名,手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。
在Web应用中,Cookie的功能类似千这张会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。
Cookie的原理
Cookie对象
Cookie是一种会话技术,用千将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。
Cookie可定义为服务器存储在浏览器上的少量信息。Cookie的主要用途是在客户端系统中保留用户的个人信息
Cookie可分为两类:会话级Cookie、持久性Cookie
会话级Cookie不设置有效期,会话结束后失效
持久性Cookie需要设置有效期,到期后失效
2、示例
1)创建并读取一个会话Cookie:
2)创建并读取一个持久性Cookie:
3)用Cookie实现页面传值
protected void btnSumbit_Click(object sender, EventArgs e) { string name = txtName.Text; string pwd = txtPwd.Text; if (name == "admin" && pwd == "123456") { HttpCookie cookie = new HttpCookie("userName", name); cookie.Expires = DateTime.Now.AddDays(1); Response.Cookies.Add(cookie); Response.Cookies["userPwd"].Value = pwd; Response.Cookies["userPwd"].Expires = DateTime.Now.AddDays(1); Response.Redirect("webform1.aspx"); } }
protected void Page_Load(object sender, EventArgs e) { if (Request.Cookies["userName"] != null && Request.Cookies["userPwd"] != null) { string name = Request.Cookies["userName"].Value; string pwd = Request.Cookies["userPwd"].Value; Response.Write("欢迎您," + name + "!您的密码是:" + pwd); } else { Response.Write("未知的用户信息!"); } //创建持久性Cookie HttpCookie cookie = new HttpCookie("UserName", "张三"); cookie.Expires = DateTime.Now.AddDays(2); Response.Cookies.Add(cookie); //读取持久性Cookie Response.Write(Request.Cookies["UserName"].Value); }
三、Session对象
1、概念
通过上面的分享我们知道了Cookie是存储在客户端的,那么必然会有不安全的因素存在,而Application又占用服务器的资源,为了客服这些弊端,所以设计了Session对象。Session顾名思义就是会话的意思,那么什么是会话呢?在现实生活中最常见的场景就是两个人打电话了,两个人接通电话彼此聊天这个过程就是会话。那么在我们的Web应用程序中,用户访问我们的页面这个过程就可以称之为Session。
Session对象用于存储用户的信息,此信息将在用户会话期间保留,当用户在同一应用程序中从一个页面浏览到另一个页面时,存储在Session对象中的变量不会被丢弃。对象会在用户放弃会话或者会话超时的时候被清除。
属性 |
说明 |
SessionID |
包含一个唯一的用户会话标识符,用于在会话过程中跟踪用户的信息。使用 Session.SessionID |
TimeOut |
设置用户超时,即它以分钟为单位指定 Session 对象在释放资源之前能够保持闲置的时间。用户可导航至另一个站点而不用关闭该应用程序。如果设定了超时属性,则无人操作的用户会话可被清除,由此释放服务器的资源。 默认值为 20 分钟。可通过在 ASPX 文件中赋值来更改此设置。例如,<% Session.Timeout = 10 %> |
LCID |
用于设定本地标志符。它可存储本地信息,如日期、货币和时间格式。 |
IsNewSession |
若该会话是由当前请求创建的,该属性将返回值 true |
Item |
获取或设置会话值的名称 |
Count |
获得会话状态集合中的项数 |
2、示例
用Session实现页面传值
1)按照下图在页面中添加文本框控件和按钮控件
2)为登录按钮添加点击事件代码
protected void btnSumbit_Click(object sender, EventArgs e) { string name = txtName.Text; string pwd = txtPwd.Text; if (name == "admin" && pwd == "123456") { Session["userName"] = name; Response.Redirect("webform1.aspx"); } }
3) 添加一个新的Web窗体,并在该页面中获取Session的值进行输出
protected void Page_Load(object sender, EventArgs e) { if (Session["userName"] != null) { Response.Write("欢迎您,"+ Session["userName"]); } }
小结:
Session对象包含特定的某个用户信息。此信息不能共享或由应用程序的其他用户访问。
当用户向服务器发出请求时,用户ID会在客户端和服务器之间传达。因此,在用户会话期间可以记录并监视用户的特定信息。
当会话过期或终止时,服务器会自动清除Session对象。