(五)Asp.NET中的Application、Cookie和Session对象

在上个博文中,我们学习了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对象。

原文地址:https://www.cnblogs.com/JuneDream/p/14053561.html