为什么我的logdiv在点击登录按钮后消失了?

时间:2014-02-26 18:11:33

标签: asp.net

我有一个div logdiv,在点击按钮登录登录后出现..并且div中有一个名为signin按钮的按钮..当我点击登录按钮登录页面重新加载时它会消失logdiv用户ID和密码是否不匹配..我想保持它,直到密码和用户ID匹配...

我的logdiv部分

<div id="logdiv" runat="server">
       <p id="logidlabel">User ID</p>
       <asp:TextBox runat="server" ID="logintext" CssClass="logusertext"></asp:TextBox>
        <p id="logpasslabel">Password</p>
        <asp:TextBox runat="server" ID="logpasstext" CssClass="logpasstext"    TextMode="Password"></asp:TextBox>
        <asp:Button runat="server" ID="signin" CssClass="signinbt" Text="Sign in" OnClick="signin_Click"/>
        <asp:Label ID="errorsignin" runat="server" Visible="False" ></asp:Label>   
    </div>

我的代码隐藏

protected void signin_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(connectionString);
    conn.Open();

    SqlCommand comm = new SqlCommand("SELECT password from usertable where userid = " + "'" + logintext.Text.ToString() + "'", conn);
    SqlDataReader reader = comm.ExecuteReader();

    reader.Read();

    try
    {
        string password = reader["password"].ToString();
        string pass2 =logpasstext.Text.ToString();

        if (password == pass2)
            iframestyle.Attributes["src"] = "userpage.aspx";
        else
        {
            errorsignin.Visible = true;
            errorsignin.Text = "INVALID LOGIN";
            logdiv.Attributes["display"] = "block";
        }
        reader.Close();
        conn.Close();
    }
    catch (Exception ex)
    {
        errorsignin.Visible=true;
        errorsignin.Text = "INVALID LOGIN";
    }

}

我不希望消失logdiv,直到密码和用户标识不匹配...我从database..is数据库获取密码和用户ID重新加载页面???

1 个答案:

答案 0 :(得分:2)

让我们首先解决最严重的错误 - 代码中的SQL Injection vulnerability。在我们处理它时,我们将检查Read()调用的结果,而不是依赖于异常来告诉我们没有行,并将一次性对象包装在using块中。

protected void signin_Click(object sender, EventArgs e)
{
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand comm = new SqlCommand("SELECT password FROM usertable WHERE userid = @username", conn))
    {
        comm.Parameters.AddWithValue("@username", logintext.Text);

        conn.Open();

        using (SqlDataReader reader = comm.ExecuteReader())
        {
            if (reader.Read())
            {
                string password = reader.GetString(0);
                if (password == logpasstext.Text)
                {
                    iframestyle.Attributes["src"] = "userpage.aspx";
                }
                else
                {
                    errorsignin.Visible = true;
                    errorsignin.Text = "INVALID LOGIN";
                    logdiv.Attributes["style"] = "display:block;";
                }
            }
            else
            {
                errorsignin.Visible = true;
                errorsignin.Text = "INVALID LOGIN";
                logdiv.Attributes["style"] = "display:block;";
            }
        }
    }
}

编辑:要解决此问题,您需要设置style属性而不是自定义display属性。

现在我们已经解决了这个问题,您需要重新考虑您的密码存储策略。以纯文本形式存储密码是一个非常糟糕的主意。你应该存储盐渍哈希。有关详细信息,请查看this article

最后,看起来你需要掌握Forms Authentication;我怀疑您当前的实施将允许未经身份验证的用户在不必先登录的情况下请求userpage.aspx