若是是在aspx 文件中监测session 是否过时的话,咱们能够写个从Page类继承的BasePage类,而后每一个aspx对应的处理类继承BasePage 就能够了。javascript
public class BasePage:Page { public BasePage() { Load += new EventHandler(BasePage_Load); } private void BasePage_Load(object sender, EventArgs e) { UserInfo userInfo = Session["UserInfo"] as UserInfo; if (userInfo == null) { //跳转到首页 //Response.Redirect("~/Default.aspx"); Server.Transfer("~/Default.aspx"); } } }
也能够重写OnInit()方法来判断Session状况。html
若是在ajax调用中检查session是否失效上面的方法就不灵了。java
若是 是ajax + ashx 的方法来实现的异步调用话:web
// Find the URL in the link right next to us, then fetch the data $.ajax({ url: "../test.ashx", type: "GET", dataType: "json", success: onDataReceived });
这样咱们能够这样来实现检查session是否失效:ajax
/// <summary> ///ashx 文件对应的基类 用于判断用户是否登陆(Session是否过时) /// </summary> public class BaseHandlerClass:IHttpHandler,IRequiresSessionState { public void ProcessRequest(HttpContext context) { if (context.Session == null) { //context.Response.StatusCode = 405; //context.Response.End(); //跳转到首页 context.Response.Redirect("~/Default.aspx"); } if (context.Session["UserInfo"] == null) { //context.Response.StatusCode = 405; //context.Response.End(); //跳转到首页 context.Response.Redirect("~/Default.aspx"); } OnLoad(context); } public bool IsReusable { get { return false; } } /// <summary> /// 代码实现 /// </summary> /// <param name="context"></param> public virtual void OnLoad(HttpContext context) { //子类能够重写此函数来实现业务处理 } } 而后ashx 对应的处理类继承上面的类并重写OnLoad函数来处理具体业务。
但若是用的是ajaxpro 的方式实现异步调用呢?或是ajax + ashx 和Ajaxpro 都用呢?
看文章有写能够用重写IHttpModule的方法来实现json
namespace JudgeSessionOutTime { public class Module:IHttpModule { public void Dispose() { throw new NotImplementedException(); } //2.在Init()方法中对Context进行注册AcquireRequestState事件。 public void Init(HttpApplication context) { context.AcquireRequestState+=new EventHandler(context_AcquireRequestState); } //3.完善AcquireRequestState方法,而后判断session过时 public void context_AcquireRequestState(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; if (app.Context.Request.RawUrl.EndsWith("aspx") || app.Context.Request.RawUrl.EndsWith("ashx")) { if (app.Context.Request.RawUrl.EndsWith("Default.aspx") || app.Context.Request.RawUrl.EndsWith("Login.aspx")) return; if (app.Context.Session["UserInfo"] == null) { app.Response.Write("<script>alert('session到期!');</script>"); } } } } }
而后在web.config 中添加c#
<httpModules> <!--重写IHttpModule类,须要配置的信息--> <!--<add name="JudgeSessionOutTime" type="JudgeSessionOutTime.Module"/>--> <!--type后面是命名空间.类名--> </httpModules>
在context_AcquireRequestState进行session判断,但全部的Ajaxpro的请求都是经过下面的session
<script src="/HeatNetworkInfoPlatformWeb/ajaxpro/prototype.ashx" type="text/javascript"> <script src="/HeatNetworkInfoPlatformWeb/ajaxpro/core.ashx" type="text/javascript"> <script src="/HeatNetworkInfoPlatformWeb/ajaxpro/converter.ashx" type="text/javascript"> <script src="/HeatNetworkInfoPlatformWeb/ajaxpro/Login,App_Web_mdrbqjr9.ashx" type="text/javascript">
中的prototype.ashx、core.ashx、converter.ashx 和App_web_mdrbqjr9.ashx 来实现的,这样就很难过滤。
一劳永逸的方法还未实现,研究中。。。。。。。。。。。
app