2013-07-20 47 views
0

我想编写一个代码,用户可以通过该代码在登录后停用其帐户。 在登录页面中,我创建了一个会话,并以页面加载方式取消激活帐户页面。 这是我的删除查询,但没有使用会话值。删除语句中的会话值

String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"]+ "\'"; 
+1

此查询引发许多许多红旗。首先,SQL注入,正如其他人所说的。使用参数。其次,根据未经哈希的密码删除帐户?我对你的应用程序了解不多,但请仔细阅读“密码散列”和“sql注入”,然后再进一步阅读! –

回答

1

你需要确保你在查询中使用之前session["email"]设置,并在不,你在它获得价值。也可以使用参数来避免SQL injection。你可以阅读这个article如何使用参数进行SQL查询。

String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].ToString() + "\'"; 
+0

对于ToString不是真的。如果在像这样的字符串表达式中使用非字符串对象,ToString()会自动执行。还有什么被添加到SQL查询? – Maarten

0

你错过 “的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 
    } 
+0

我试过这种方法时,我调试了我的代码字符串传递有价值,但字符串电子邮件没有任何。我已经使用登录控件的用户名值等于会话值Session [“email”] = Login1.UserName; 此查询给我错误必须声明标量变量传递。 –

+0

if(Session [“email”]!= null)condtion为true,但字符串电子邮件不包含任何内容 –

+0

对于ToString不是真实的。如果在像这样的字符串表达式中使用非字符串对象,ToString()会自动执行。还有什么被添加到SQL查询? – Maarten