2009-07-14 5 views
0

ログインが成功したら、私は自分のログインページからホームページにどのようにリダイレクトできますか? 私はこの中にユーザー名とパスワードを格納しているデータベースを1つ持っています。 ログイン時に、ユーザー名とパスワードをSQLクエリで確認します。 私のコードは以下の通りです。ページのリダイレクト

protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (TextBox1.Text == "") 
     { 
      Label3.Visible = true; 
      Label3.Text = "* Required Field"; 
     } 
     else if (TextBox2.Text == "") 
     { 
      Label4.Visible = true; 
      Label4.Text = "* Required Field"; 
     } 

     else 
     { 
      Label3.Visible = false; 
      Label4.Visible = false; 
      userid = TextBox1.Text; 
      pass = TextBox2.Text; 

      SqlConnection conn = new SqlConnection("SERVER= server3\\OFFICESERVERS; Initial catalog = Web; Integrated Security = SSPI"); 
      SqlCommand mycmd = new SqlCommand(); 
      mycmd.Connection = conn; 
      mycmd.CommandText = "SELECT FirstName, LastName, MiddleName, Email, Age FROM web WHERE IsActive=1 AND LoginName='" + userid + "' " + "AND Password='" + pass + "'"; 

      try 
      { 

       conn.Open(); 
       mycmd.ExecuteScalar(); 
       SqlDataAdapter da = new SqlDataAdapter(mycmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       GridView1.Visible=true; 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
       TextBox1.Text = ""; 
       TextBox2.Text=""; 


      } 

      finally 
      { 
       conn.Close(); 
       conn.Dispose(); 
      } 
     } 
    } 

私の要件は、ログインが成功した場合、ログインページからホームページにリダイレクトすることです。 どうすればいいですか?

答えて

3

まず、ストアドプロシージャを使用してください!そのSQLコマンドは、私は自分のパスワードとして

' = '' or '1'='1 

を入力した場合、それは私が望んでいたものは何でもユーザ名で私を聞かせ

mycmd.CommandText = "SELECT FirstName, LastName, MiddleName, Email, Age FROM web WHERE IsActive=1 AND LoginName='" + userid + "' " + "AND Password='" + pass + "'"; 

guard against SQL injection)SQLインジェクションの問題点を大きく開いてあなたを残しています!

第2に、Response.Redirect( "/ relative/path/to/home.page"、false)を実行するだけです。あなたをホームページにリダイレクトします。

あなたはいくつかのメソッドを持っているので、私は、そのコードをリファクタリングを見てみたい:ここマウロの答えに加えて

protected bool Login(string username, string password) //handles logging the user in 
protected void LoginSuccess() //handles the redirect if the user successfully logs in. 
protected void BindDatagrid() //handles the databind if the user didn't log in. 
+1

あなたはパンチに私を打つ。いい答え。 – BinaryMisfit

1

は、あなたが考えるようにしたいかもしれないいくつかの他の変更です:

  1. Webコントロールの名前を、たとえばtxtPasswordなどの名前に変更します。
  2. Web.configファイルに接続文字列を格納すると、テストから本番への柔軟な移行が可能になります。
  3. 最後にtryの代わりにusing文を使用してください。
  4. SqlDataAdapterは、接続の終了と開けを処理します。
  5. SQL Server 2005以上を使用している場合(SPはインラインSQLよりもパフォーマンスが大幅に向上しません)、SPの代わりにパラメータを使用できます。
0

あなたのgridviewは無意味です。ログインに失敗したように、何も含まれておらず、ログインが成功すると別のページに移動します。

関連する問題