我想编写一个代码,用户可以通过该代码在登录后停用其帐户。 在登录页面中,我创建了一个会话,并以页面加载方式取消激活帐户页面。 这是我的删除查询,但没有使用会话值。删除语句中的会话值
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注入”,然后再进一步阅读! –