Global.asax文件,全局应用程序类: Application_Start()方法----创建HttpApplication对象,循环遍历所有IHttpModule,将所有注册函数注册到管道事件中(只是注册, 并未调用执行)。 ----进入 事件 管道,依次触发管道中的所有事件,并依次调用相应的 事件 的 注册 函数。----Global.asax文件,全局应用程序类:类中的其他方法。
Web.config:
<system.web>
。。。。。
</system.web>
<!--关于HttpModule的配置-->
<system.webServer>
<modules>
<add name="ValidateSessionHttpModule" type="XXX.Common.ValidateSessionHttpModule"/>
</modules>
</system.webServer>
XXX.Common.ValidateSessionHttpModule.cs 类(校验Session是否登录):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace XXX.Common
{
public class ValidateSessionHttpModule:IHttpModule //必须实现该接口
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
context.AcquireRequestState+=context_AcquireRequestState; //(委托)AcquireRequestState是请求管道中第9个事件,为该事件注册一个函数。
}
public void context_AcquireRequestState(object sender, EventArgs e) //为委托绑定(注册)的函数
{
HttpApplication application = sender as HttpApplication;
HttpContext context=application.Context;//获取当前的HttpContext
string url= context.Request.Url.ToString();//获取用户请求的URL地址。
if (url.Contains("Admin"))
{
if (context.Session["userInfo"] == null)
{
context.Response.Redirect("/Login.aspx"); // "/"表示网站根目录,不能少,否则会请求Admin/Lagin.aspx ,这样就会无限跳转。
}
}
}
}
}