幾種判斷asp.net中session過期方法的比較_.Net教程

      編輯Tag賺U幣

      推薦:關于asp.net 自定義分頁控件
      本篇文章,小編將為大家介紹,關于asp.net 自定義分頁控件,有需要的朋友可以參考一下

      方法一:最麻煩也是最容易想到的方法,在每個頁面的page_load()方法里面判斷:

      復制代碼 代碼如下:www.wf0088.com

      protected void Page_Load(object sender, EventArgs e)
      {
      if (!IsPostBack)
      {
      if (Session["username"] != null)
      {

      //登陸成功的情況
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>alert('登錄成功!')</script>");
      }
      else
      {
      //過期,重新登錄
      Response.Redirect("LoginForm.aspx");

      }
      }
      }

          缺點:代碼冗余,重復寫判斷session代碼。

      方法二:重寫HttpModule中的Init()方法,然后判斷session過期情況。

        1.新建一個繼承IHttpModule接口的類Module ,讓Module類實現(xiàn)IHttpModule接口成員。

        2.在Init()方法中對Context進行注冊AcquireRequestState事件。

        3.在AcquireRequestState方法中實現(xiàn)判斷session代碼。

      復制代碼 代碼如下:www.wf0088.com

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

      namespace JudgeSessionOutTime
      {
      //1.繼承IHttpModule類,實現(xiàn)接口成員
      public class Module:IHttpModule
      {
      #region 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.Session["username"] == null)
      {
      app.Response.Write("<script>alert('session到期!');</script>");
      }
      }

      #endregion
      }
      }

      4.配置web.config文件,在<system.web>中添加以下代碼

      復制代碼 代碼如下:www.wf0088.com

      <httpModules>

      <!--重寫IHttpModule類,需要配置的信息-->
      <add name="demo" type="JudgeSessionOutTime.Module"/>
      <!--type后面是命名空間.類名-->

      </httpModules>

        優(yōu)點:效率高,代碼無冗余,一次配置,全程受用。

        原理:實現(xiàn)IHttpModule接口的類Module是在執(zhí)行頁面之前就會執(zhí)行。即:在page_load()事件執(zhí)行之前,就會執(zhí)行Module,然后執(zhí)行判斷session方法,未過期,繼續(xù)執(zhí)行,過期,就會執(zhí)行相應操作,就不用執(zhí)行page_load()頁面的方法了。

        感悟:說實話,對于這點,在做網(wǎng)站登錄,然后判斷用戶名方面,我覺得不太適合,因為,一旦程序開始加載,就會執(zhí)行module類方法,那時候session還是空,所以無論怎樣,都不會放下走,一直停在登錄界面(個人見解,歡迎各位拍磚!)

      方式三:重寫繼承page的OnInit()虛方法,在需要的界面上,繼承這個類。

        1.新建繼承page類的類JudgeSession,實現(xiàn)接口成員。

        2.重寫OnInit()方法,判斷session情況。

        3.在需要判斷session過期情況的頁面上,繼承該JudgeSession類,而不是page類,從而實現(xiàn)效果。

      復制代碼 代碼如下:www.wf0088.com

      //JudgeSession 類

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

      namespace JudgeSessionOutTime
      {
      public class JudgeSession : System.Web.UI.Page
      {
      protected override void OnInit(EventArgs e)
      {
      if (Session["username"] == null)
      {
      Response.Write("session過期!");
      }
      else
      {
      Response.Write("session沒有過期,用戶名:"+Session["username"].ToString());
      }
      }

      }
      }

        優(yōu)點:方法靈活,代碼重用率高。在需要判斷session的頁面繼承JudgeSession類,不需要的頁面,繼承page類即可。

      分享:asp.net中使用repeater和PageDataSource搭配實現(xiàn)分頁代碼
      asp.net中使用repeater和PageDataSource搭配實現(xiàn)分頁代碼,需要的朋友可以參考下

      來源:模板無憂//所屬分類:.Net教程/更新時間:2013-04-23
      相關.Net教程