2013-03-27 12 views
6

私はかなり.NETに慣れていません - ログインしたユーザーにしか表示されない管理セクションを持つサイトを作っています。 私はログインコードを作成して、ユーザーが認証されるとセッション変数を割り当てます。 私の質問は、各ページに以下の機能を持たせるのではなく、セッション変数をチェックする方が効率的な方法がありますか?すべてのページでセッションを確認しますか?

protected void Page_Load(object sender, EventArgs e) 
{ 
     checkSession(); 

} 
public void checkSession() 
{ 
    if (Session["LoggedIn"] != "true") 
    { 
     Response.Redirect("default.aspx"); 
    } 
} 

ありがとうございました!

+0

クラス内でcheckSession()関数を使用すると、cls.checkSession()を呼び出してboolを返すことができます。 – Csharp

+0

'cookie'を使う' Form Authentication'を使う必要があります –

+0

なぜ "true"ですか?代わりにtrueを使用してください。 –

答えて

5

あなたはMasterPage's Page_Loadイベントにチェックコードを置くことができます第一およびGlobal.asaxの

public class Global : System.Web.HttpApplication 
{ ... 
    void Application_AcquireRequestState(object sender, EventArgs e) 
    {    
     HttpContext context = HttpContext.Current; 
     // CheckSession() inlined 
     if (context.Session["LoggedIn"] != "true") 
     { 
      context.Response.Redirect("default.aspx"); 
     } 
    } 
    ... 
} 
と二

ExmapleためPostRequestHandlerExecuteイベントハンドラ

+0

ありがとう!私はこれが私にとって最高の解決策だと思う。 – Dashsa

+1

ERR_TOO_MANY_REDIRECTS – Elshan

+0

default.aspxにリダイレクトしてもまだログに記録されていないので、default.aspxに再度リダイレクトします。 – Snote

2

は今、すべてのページが検証

public class MyPage : System.Web.UI.Page 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["yoursession"] != "true") 
    { 
    //code 
    } 
} 



public class yourCustomPage1 : MyPage 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //you don't have to check or call any method.. 
} 
} 

public class yourCustomPage2 : MyPage 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    //you don't have to check or call any method.. 
} 
} 

などを持って、あなたのセッションのチェックコード

を追加することにより、ページ

オーバーライドLoadメソッドから派生したカスタムクラスからページを派生します..

+1

これを説明するコードサンプルがあると便利です。 –

+0

私はそのことに取り組んでいます – RollRoll

1

ログインしているユーザーを確認する基本クラスから継承するクラスにすることができます。

3

おそらく、フォーム認証を使用して検討する必要があります。
http://www.asp.net/web-forms/videos/authentication/using-basic-forms-authentication-in-aspnet

は、必ず承認を必要とするページ、またはフォルダを設定することができますので、ランタイムではなく、手動でチェックすることよりも、その要件の世話をします。

+1

フォーム認証はより安全な丸められたセキュリティシステムであり、単純なセッションチェックに比べていくつかの利点があります:http://support.microsoft.com/kb/910443 – Liam

1

ASP.Netでフォーム認証を理解するには、新しいWebサイトを作成することをお勧めします。 Visual Studioで[新規プロジェクト]を作成し、[Web]、[ASP.NET Webアプリケーション]の順に選択します。 プロセスとASP.Netの方法を理解するには、「アカウント」フォルダで確認してください。

0

ベースページを作成し、このベースページからすべてのページを継承し、ベースページに機能を設定することができます。

public class BasePage : Page 
{ 
    protected void checkSession() 
    { 
    if (Session["LoggedIn"] != "true") 
    { 
     Response.Redirect("default.aspx"); 
    } 
    } 
} 

あなたのページ

public partial class YourPage : BasePage 
{ 
.... 
} 

別の解決策:

にHTTPモジュールでは、あなたのHTTPモジュールで、真偽と承認のfunctionnalitiesを設定するために校長(役割)とアイデンティティを作成する論文を添付現在のスレッドへの情報

リンク:あなたはMasterPageを使用している場合Global.asaxまたはカスタムHttpModuleのいずれかを使用してのためにAcquireRequestStateイベントハンドラ内chekingコードを入れない場合http://msdn.microsoft.com/en-us/library/system.security.principal.iidentity.isauthenticated.aspx

0
  public class BasePage : Page 
      { 
      protected void checkSession() 
       { 
        if (Session["LoggedIn"] == null) 
        { 
          Response.Redirect("~/default.aspx/"); 
        } 
       } 
      } 
0

第1方法:Global.asax。cs ADD

void Application_AcquireRequestState(object sender, EventArgs e) 
    { 
     HttpContext context = HttpContext.Current; 
     Page page = context.Handler as Page; 

     if ((string)context.Session["LoggedIn"] != "true" 
      && !(page.AppRelativeVirtualPath == "~/Default.aspx")) 
      context.Response.Redirect("default.aspx"); 
    } 

第2の方法:マスターページで同じセッション管理を行うことができます。ページロードイベント。

これが役に立ちます。

関連する問題