6

私は.NETにかなり慣れていません.ログインしたユーザーにのみ表示される管理セクションを持つサイトを作成しています. ログイン コードを作成し、ユーザーが認証されたら、セッション変数を割り当てます。私の質問は次のとおりです。各ページに次の関数を配置するよりも、セッション変数を確認するより効率的な方法はありますか?

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

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

よろしくお願いします!

4

9 に答える 9

6

を使用している場合は、またはカスタムを使用していない場合MasterPageはチェック コードをイベントに配置し、最初のイベント ハンドラと 2 番目のイベント ハンドラの内部にチェック コードを配置できます。MasterPage's Page_LoadGlobal.asaxHttpModuleAcquireRequestStatePostRequestHandlerExecute

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");
        }
    }
  ...
}
于 2013-03-27T15:25:37.093 に答える
3

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

ページまたはフォルダーが常に承認を必要とするように構成できるため、手動で確認する必要はなく、ランタイムがその要件を処理します。

于 2013-03-27T15:24:22.243 に答える
2

Page から派生したカスタム クラスからページを派生させます。

セッション チェック コードを追加して Load メソッドをオーバーライドする

これで、すべてのページが検証されました

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..
 }
}

等...

于 2013-03-27T15:23:26.073 に答える
2

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

于 2013-03-27T15:24:07.367 に答える
1

ASP.Net でのフォーム認証を理解し始める良い方法は、まったく新しい Web サイトを作成することです。Visual Studio に移動して新しいプロジェクトを作成し、[Web]、[ASP.NET Web アプリケーション] の順に選択します。プロセスと ASP.Net メソッドを理解するには、Account フォルダーで確認してください。

于 2013-03-27T15:25:07.033 に答える
1

BasePage を作成し、この基本ページからすべてのページを継承し、基本ページに関数を設定できます。

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

あなたのページ

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

別の解決策:

HTTP モジュールで、認証と承認の機能を設定するためにプリンシパル (ロール) と ID を作成し、http モジュールでこれらの情報を現在のスレッドに添付します。

リンク: http://msdn.microsoft.com/en-us/library/system.security.principal.iidentity.isauthenticated.aspx

于 2013-03-27T15:25:29.940 に答える
0

このコードを GLOBAL.asax.cs に追加できます。これにより、セッションが空かどうかがチェックされます。また、リクエストがログイン ページから初期化されている場合はリダイレクトされません。そうでない場合は、ループに陥ります。

 void Application_AcquireRequestState(object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;
        // CheckSession() inlined
        if (Context.Request.Url.LocalPath != "/UIComponents/User/Login.aspx")
        {
            if (context.Session["Name"] == null)
            {
                FormsAuthentication.RedirectToLoginPage();
            }
        }
    }
于 2019-03-04T11:59:09.920 に答える