いくつかの判断asp.Netにおけるsessionの期限切れ方法の比較

4398 ワード

方法1:最も面倒で最も考えやすい方法で、各ページのpage_load()メソッドの判断:
 
  
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["username"] != null)
                {

                    //
                    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "alert(' !')");
                }
                else
                {
                    // ,
                    Response.Redirect("LoginForm.aspx");

                }
            }
        }


欠点:コード冗長、繰り返し書き込み判断sessionコード.
 
方法2:HttpModuleのInit()メソッドを書き換え,セッションの有効期限を判断する.
  1.IHttpModuleインタフェースを継承するクラスModuleを新規作成し、ModuleクラスにIHttpModuleインタフェースメンバーを実装させます.
  2.Init()メソッドでContextにAcquireRequestStateイベントを登録します.
  3.AcquireRequestStateメソッドでは,セッションコードの判定が実現される.
 
  
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 ,
    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("alert('session !');");
            }
        }

        #endregion
    }
}


4.webを構成する.configファイル、に次のコードを追加
 
  


       
       
       



利点:効率が高く、コードに冗長性がなく、一度に構成され、全過程で使用されます.
原理:IHttpModuleインタフェースを実装するクラスModuleは,ページを実行する前に実行される.すなわちpage_load()イベントが実行される前にModuleが実行され、sessionメソッドが実行されます.期限切れではありません.実行を続行します.期限切れであれば、page_を実行する必要はありません.load()ページの作り方です.
悟り:正直に言うと、この点については、サイトにログインして、ユーザー名を判断する上で、あまり向いていないと思います.プログラムがロードされると、module類の方法が実行されるので、その時はsessionも空いていたので、どうしても置いて行かず、ログインインタフェースに止まっていました(個人的な見解、レンガを撮ることを歓迎します!)
 
方式3:継承pageのOnInit()虚メソッドを書き換え,必要なインタフェースでこのクラスを継承する.
  1.新しいpageクラスを継承するクラスJudgeSessionを作成し、インタフェースメンバーを実装します.
  2.OnInit()メソッドを書き換え,セッション状況を判断する.
  3.セッションの有効期限を判断する必要があるページでは、pageクラスではなくJudgeSessionクラスを継承し、効果を実現します.
 
  
//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());
            }
        }

    }
}


利点:方法が柔軟で、コードの再利用率が高い.セッションを判断する必要があるページにはJudgeSessionクラスを継承し,不要なページにはpageクラスを継承すればよい.