zoukankan      html  css  js  c++  java
  • Web页面添加一个基类 BasePage解决登陆验证

    就拿登录说事吧,如果有很多页面都需要登录之后才能看,按照一般的做法,在需要登录才能看的页面去判断有没有登录,比如查看cookie,session等等多种方式,看自己喜欢,但是每页都得写这个判断是不是有点麻烦?

    那就引入基类思想,每个页面都从这个基类继承,那只需要在基类里写个判断不就不好了,简便快捷。

    首先,先添加一个App_Code文件夹,在这个文件夹下添加一个类,名字随便,为了方便记忆,我这边叫做BasePage.cs,内容为:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    /// <summary>
    /// BasePage 的摘要说明
    /// </summary>
    public class BasePage : Page
    {
        public BasePage()
         {
            //
            // TODO: 在此处添加构造函数逻辑
            //
         }

        /// <summary>
        /// 取session信息
        /// </summary>
        /// <returns></returns>
        public string GetUserInfo()
         {
            string userinfo = "";
            if (Session["userinfo"] != null)
             {
                 userinfo = Session["userinfo"].ToString();
             }
            return userinfo;
         }

        /// <summary>
        /// 页面重定向
        /// </summary>
        private void pageRedirect()
         {
             Response.Redirect("Login.aspx");
         }


        #region PageInit
        /// <summary>
        /// 重载PreInit事件,实现对Theme的控制
        /// </summary>
        /// <param name="e"></param>
        /// <remarks>
        /// </remarks>
        protected override void OnPreInit(EventArgs e)
         {
            base.OnPreInit(e);
             System.Web.Profile.ProfileBase profile;
             profile = HttpContext.Current.Profile;
            this.Theme = "Default";
         }

        /// <summary>
        /// pageload时获取userinfo,判断session是否失效,如果失效返回登录页面
        /// </summary>
        /// <param name="e"></param>
        protected override void OnLoad(EventArgs e)
         {
            if (GetUserInfo() == "")
             {
                 pageRedirect();
             }
            base.OnLoad(e);
         }
        #endregion

    }

    在这个基类内,我们定义了2个非常简单的功能,第一:实现皮肤控制,第二:判断是否登录

    然后在项目中建2个页面:一个login.aspx    一个default.aspx

    login.aspx很简单,随便你怎么写,然后写入session就好

    default.aspx内容为:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class _Default :BasePage  
    {
        protected void Page_Load(object sender, EventArgs e)
         {
             Response.Write(Session ["userinfo"
    ]);
         }
    }

    继承了BasePage,这样如果直接打开default.aspx会重定向到login.aspx是不是方便了许多?


    这只是一种思想,你可以在基类中写很多内容,但是有利也有弊,大家可以慢慢体会。


    下面是专业文章中的描述:

    默认情况下,ASP.NET应用程序中的所有Wen窗体页面都继承自System.Web.UI.Page。这个类实现了作为HttpHandler的必要功能,ASP.NET运行库在检测到调用某个页面的请求时,就会调用这个类。简单地说,HttpHandler是处理请求的终端。Page类是HttpHandler用于处理和显示Web窗体的一种特定实现方式。第17章将举例说明执行HttpHandler来完成其他任务的方式。

    为构建应用程序而建立体系结构模式时,找出减少冗余和灵活构建的方式总是首要的任务。一种可以采用的模式是定义一个页面基类,让所有的页面都继承这个基类,而不是System.Web.UI.Page。这样,即使最初没有使用它,也可以建立一个基础,以便添加所有页面都可见的属性和功能。这个新的基类继承自System.Web.UI.Page,这样就不必在新的页面基类中重复实现所有的功能了。这么做会使新的页面基类建立在System.Web.UI.Page类功能的基础之上。另外,这还将允许新的基类访问系统类的所有受保护的属性、方法和事件。

            根据所建立的应用程序的规模和复杂性,可以考虑实现多层基本页面。例如,最底层的基本页面是一个实用类库的一部分,该类库不是本应用程序专用的。但继承这个类库是当前建立的应用程序所特定的。它可以提供在这个应用程序环境下比较有用的属性和方法,例如提供ActiveProductID。最后,如果有一组完成类似任务的页面,例如DataInput或SearchResults,就可以继承应用程序专用的基本页面,以创建一个与这组页面相关的页面。这些层都提供了扩展点,有助于减少页面中的冗余。

     
  • 相关阅读:
    只使用代码创建WPF程序
    C#第一课
    VMware虚拟机的网络设置
    mac系统下配置Eclipse Java/C++ 开发环境
    【读书笔记】【物联网】《物物连起大世界物联网的应用与前景》
    移动硬盘无法格式化
    Win7下chm文件打不开的解决办法[转]
    MapInfo数据到ARCGIS数据Shapefile的转换
    mapx不具开发功能
    [读书笔记]熟悉SQLPLUS Oracle数据库环境
  • 原文地址:https://www.cnblogs.com/280850911/p/2555064.html
Copyright © 2011-2022 走看看