delete语句中的会话值

时间:2013-07-20 16:05:18

标签: c# asp.net

我想编写一个代码,用户可以在登录后停用其帐户。 在登录页面中,我创建了一个会话,并在停用帐户页面的页面加载方法中获取它。 这是我的删除查询,但是没有使用会话值。

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

2 个答案:

答案 0 :(得分:1)

您需要确保在使用查询之前设置session["email"],而不是 null 并且您在其中获得了值。还可以使用参数来避免SQL injection。您可以阅读此article如何使用参数进行SQL查询。

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

答案 1 :(得分:0)

你在会话[“email”]

之后错过了“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 Password=@pass AND EmailAddress=@email";
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
    }