一、前言
当我们登录到系统之后可以通过某种方式来存储登录用户信息,比如Session、Cookie、cache等。然后通过判断用户信息是否存在来决定是否给其访问某个需要认证的页面。记得当初的我是通过在每个页面的page_load方法中写上几句验证代码来做判断,到后来发现这种方式太麻烦。那有没有什么简单的方法,只需要在一个地方做判断然后提供给所有需要登录验证的页面呢!?经过在网上的搜索,最终找到了一个简便的方式。
二、解决方案
通过创建一个继承了page的类来作为所有需要验证的页面类的基类,在这个基类中给load事件注册一个验证用户是否登录的方法。具体的实现方式如下:
创建的基类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UI { public class BasePage:System.Web.UI.Page { public BasePage() { base.Load += new EventHandler(BasePage_Load); } void BasePage_Load(object sender, EventArgs e) { if (Session["User"] == null) { Response.Redirect("/Login.aspx"); } } } }
在该类中有一个验证用户是否登录的方法,然后在其构造函数中给load事件注册该方法。
创建的页面:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.Security; using Component.Model; using BLL; namespace UI { public partial class index : BasePage { protected void Page_Load(object sender, EventArgs e) { Lmt_user user = Session["User"] as Lmt_user; LoginName.Text = user.UserName; } //用户注销 protected void UserLogout_Click(object sender, EventArgs e) { UserLogin Login = new UserLogin(); Login.LogOut(); Response.Redirect("/Login.aspx"); } } }
可以看到该页面类继承了上面创建的Basepage类。这样每当创建一个页面时,可以继承Basepage这个类来实现登录验证。
注:派生类被实例化时,将首先调用基类的构造函数