using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
namespace MyMook
{
public class MyHttpModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication application)
{
application.AcquireRequestState += new EventHandler(context_AcquireRequestState);
// application.BeginRequest += new EventHandler(context_AcquireRequestState);
//这里面要注意千万不要写成BeginRequest,那样就会无法获得session
}
void context_AcquireRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
string path=context.Request.Path;
if (!context.Request.CurrentExecutionFilePathExtension.Equals(".aspx") && !context.Request.CurrentExecutionFilePathExtension.Equals(".ashx") ) {
return;
}//此处保证只过滤aspx/ashx/htm的请求
Match m = Regex.Match(path,@"/WebLogin/+");
if (m.Success) {
return;
}//不过滤文件夹WebLogin中的内容
try
{
object user = context.Session["user"];
if (user == null)
{
context.Response.Redirect("~/WebLogin/Login.aspx");
}
else {
return;
}
}
catch {
context.Response.Redirect("~/WebLogin/Login.aspx");
}
}
}
}
在web.config中:
<httpModules>
<add name="MyHttpModule" type="MyMook.MyHttpModule,MyMook"/>
</httpModules>
要点:
1.注册事件时,不要写application.BeginRequest,这样会导致无法获得Session.
application.AcquireRequestState += new EventHandler(context_AcquireRequestState);
// application.BeginRequest += new EventHandler(context_AcquireRequestState);