0

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

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

2 回答 2

1

您需要确保session["email"]在查询中使用之前设置它并且它不为并且您从中获得价值。还要使用参数来避免SQL 注入。您可以阅读这篇文章如何使用参数进行 SQL 查询。

String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].ToString() + "\'";
于 2013-07-20T16:07:44.530 回答
0

会话后你错过了“ToString()”方法[“email”]

像这样

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 injection 。像这样

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
    }
于 2013-07-20T16:21:26.367 回答