簡體   English   中英

如何在c#中驗證網站的密碼和用戶名

[英]How to validate Password and Username for website in c#

我有一個簡單的登錄網站,這是我在 Visual Studio 2015 中的第一個網站項目。我已經成功創建了一個 SQL 數據庫,其中包含用戶名、密碼、電子郵件和國家等用戶信息,我還成功創建了一個用戶注冊頁面,其中包含新用戶可以在那里輸入詳細信息,這些詳細信息將被添加到數據庫中。 這一切正常。

但是我在嘗試根據 SQL 數據庫中包含用戶數據的行中存儲的值驗證用戶名和密碼時遇到了障礙,以允許用戶訪問僅限成員的頁面。

這是用戶單擊登錄按鈕時的代碼片段。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString);
        con.Open();
        string checkUser = "SELECT * FROM Members where Username= '" + TextBoxSignUser.Text + "' and Password= '" + TextBoxSignPass.Text + "'";
        SqlCommand cmd = new SqlCommand(checkUser, con);
        cmd.ExecuteNonQuery();
        con.Close();

我知道我需要做的可能類似於下面的偽代碼,但我不確定如何根據數據庫中存儲的值驗證這些信息。

if ("Username" and "Password" == the value of Username and Password TextBox.Text)
{
        Response.Write("Sign in successful");
        Response.Redirect("MemberTestPage.aspx");
}
else
{
Response.Write("Details incorrect, Please try again")
}

我認為首先出於某些原因(例如最佳性能和高安全性),最好使用 ADO.NET 庫。 這是我的建議。 希望對你有用:

using System.Data.SqlClient;
...

string conStr = ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString;
string sql = "SELECT * FROM Members where Username = @user and Password = @pass";
SqlParameter pUser = new SqlParameter("@user", TextBoxSignUser.Text);
SqlParameter pPass = new SqlParameter("@pass", TextBoxSignPass.Text);
using (SqlConnection con = new SqlConnection(conStr))
{
    using (SqlCommand cmd = new SqlCommand(sql, con))
    {
        cmd.Parameters.Add(pUser);
        cmd.Parameters.Add(pPass);

        con.Open();

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.Read())
            {
                // Successfully signed in
                // Also you can access your fields' value using:
                //    1. its index (e.x. reader[0])
                //    2. or its name: (e.x. reader["Username"])
            }
            else
            {
                // Login failed
            }
        }
    }
}

使用數據適配器填充數據表 您將數據放入數據表中 您可以獲得查詢的返回值並匹配參數

        DataTable Dt = new Datatable();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);

        if (dt.rows.count > 0 ) 
        {
           //MATCH FOUND
        }

你可以使用像..

string query= "SELECT * FROM Members where Username= 'usr' and Password= 'pwd'";
    SqlCommand cmd = new SqlCommand(query, con);
    MySqlDataAdapter objda = new MySqlDataAdapter(cmd);
    DataSet objDs = new DataSet();
    objda.Fill(objDs);
    if(objDs.Tables[0].Rows.Count>0)
    {
          Response.Write("Sign in successful");
          Response.Redirect("MemberTestPage.aspx");
    }

您可以在不使用數據集的情況下執行以下操作,

var con = new SqlConnection("your connection string goes here");
SqlCommand cmd = new SqlCommand("SELECT * FROM Members where Username= 'usr' and Password= 'pwd'", con);
bool result = false;
cmd.Connection.Open();
using (cmd.Connection)
{
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows)
        result = true;
}
if (result == true)
    // Login successful
else
    // Login failed
string query = string.Format("SELECT TOP 1 * FROM [Table] WHERE Username = '{0}' and Password = '{1}'", txtUsername.Text, txtPassword.Text);
command = new OleDbCommand(query, con);
var reader = command.ExecuteReader();

if (reader.HasRows)
{
  //successfully login
}
else
  //error message

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM