いくつかの判断asp.Netにおけるsessionの期限切れ方法の比較
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クラスを継承すればよい.