我想編寫一個代碼,用戶可以通過該代碼在登錄後停用其帳戶。 在登錄頁面中,我創建了一個會話,並以頁面加載方式取消激活帳戶頁面。 這是我的刪除查詢,但沒有使用會話值。刪除語句中的會話值
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"]+ "\'";
我想編寫一個代碼,用戶可以通過該代碼在登錄後停用其帳戶。 在登錄頁面中,我創建了一個會話,並以頁面加載方式取消激活帳戶頁面。 這是我的刪除查詢,但沒有使用會話值。刪除語句中的會話值
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"]+ "\'";
你需要確保你在查詢中使用之前session["email"]
設置,並在不空,你在它獲得價值。也可以使用參數來避免SQL injection。你可以閱讀這個article如何使用參數進行SQL查詢。
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].ToString() + "\'";
對於ToString不是真的。如果在像這樣的字符串表達式中使用非字符串對象,ToString()會自動執行。還有什麼被添加到SQL查詢? – Maarten
你錯過 「的ToString()」 會話[ 「電子郵件」]
這樣
session["email"].ToString()
建議檢查會話可用後使用它
前法if(Session["email"] != null)
{
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].Tostring() + "\'";
}
else
{
//session timeout
}
還有一件事,你的sql代碼會暴露給你sqlinjection .. 這是推薦指定您使用Parameterize執行sql查詢以避免sql注入。像這樣
if(Session["email"] != null)
{
string password = txtPassword.Text;
string email = Session["email"].Tostring();
String SQLQuery = "DELETE FROM SignUp Where [email protected] AND [email protected]";
SqlCommand dbComm = new SqlCommand(SQLQuery , new SqlConnection());
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = password ;
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = email ;
//execute sql
}
else
{
//session timeout
}
我試過這種方法時,我調試了我的代碼字符串傳遞有價值,但字符串電子郵件沒有任何。我已經使用登錄控件的用戶名值等於會話值Session [「email」] = Login1.UserName; 此查詢給我錯誤必須聲明標量變量傳遞。 –
if(Session [「email」]!= null)condtion爲true,但字符串電子郵件不包含任何內容 –
對於ToString不是真實的。如果在像這樣的字符串表達式中使用非字符串對象,ToString()會自動執行。還有什麼被添加到SQL查詢? – Maarten
此查詢引發許多許多紅旗。首先,SQL注入,正如其他人所說的。使用參數。其次,根據未經哈希的密碼刪除帳戶?我對你的應用程序瞭解不多,但請仔細閱讀「密碼散列」和「sql注入」,然後再進一步閱讀! –