• (五)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对象。

  • 相关阅读:
    正则表达式
    HashTable与HashMap的区别
    求解连续子数组乘积的最大值
    求解N个值中最大的k个数,N远大于k
    C++权限修饰符
    DBSCAN算法
    【leetcode】1318. Minimum Flips to Make a OR b Equal to c
     【leetcode】1317. Convert Integer to the Sum of Two No-Zero Integers
    【leetcode】1316. Distinct Echo Substrings
    【leetcode】1315. Sum of Nodes with Even-Valued Grandparent
  • 原文地址:https://www.cnblogs.com/JuneDream/p/14053561.html
Copyright © 2020-2023  润新知