1

こんにちは。データベースを確認したいのですが、ユーザーがすでにログインしている場合は、ログインを停止してください。ここに、ヘルプ用のコードthxのサンプルがあります。

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    {
        String name = ((Login)LoginView1.FindControl("Login1")).UserName;
        SqlConnection source_db = new SqlConnection();
        source_db.ConnectionString = ConfigurationManager.ConnectionStrings["source"].ConnectionString;//konfiguracja polaczenia z web.cfg 
        SqlCommand sql_polecenie3 = new SqlCommand("select Status from  aspnet_Users where UserName='" + name + "';", source_db);
        try
        {
            source_db.Open();//otwiera polaczenie
            if ((int)sql_polecenie3.ExecuteScalar() == 1)
            {
                Label1.Visible = true;
            }
            else
            {
                Label1.Visible = false;
            }
            source_db.Close();//zamyka polaczenie
        }
        catch (Exception)
        {
            source_db.Close();//zamyka polaczenie
        }
    }
4

3 に答える 3

2

アレックス、私はあなたのコードを決して使用しません...あなたはいくつかの間違ったことをしています、そして最も重要なのは、誰もがあなたが今見せたものからあなたのデータベース全体を削除することができるということです。

まず最初に..。

  • データベースアクセス(データベースコード)は常に別のプロジェクト(通常はライブラリプロジェクト-DLL)にある必要があります-これに関する私の答えを参照してください
  • あなたは常にあなたのオブジェクトを処分するべきです、あなたの場合、あなたはあなたのusing両方でキーワードを安全に使うことがSqlConnectionできますSqlCommand
  • 入力をサニタイズしていることが確実でない限り、常にSQL変数を使用し、コードの追加から直接SQLクエリを作成しないでください。

あなたの答え自体に関しては、これを追加するe.Cancel = true;と、応答をカスタマイズしたこと、およびオブジェクトに自動応答を続行させたくないことをアクションに通知します。

于 2012-08-21T11:11:46.083 に答える
1

Loginコントロールは、この目的のためにAuthenticateイベントを提供します。
カスタムチェックを実行し、それに基づいてログインを拒否する場合は、認証イベントを使用する必要があります。

<asp:Login id="Login1" runat="server"
                OnAuthenticate="OnAuthenticate">
            </asp:Login>



private void OnAuthenticate(object sender, AuthenticateEventArgs e)
{
    bool Authenticated = false;
    Authenticated = SiteSpecificAuthenticationMethod(Login1.UserName, Login1.Password);

    e.Authenticated = Authenticated;
}
于 2012-08-21T11:12:54.307 に答える
0

答えは、e.Cancel = trueまたはfalseを追加することです。これは、ログインをキャンセルするタイミングによって異なります。

于 2012-08-21T11:06:58.363 に答える