1

您好,所以我想检查数据库是否用户已经登录,然后如果他在这里登录停止登录是我的代码示例,请提供帮助。

protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    {
        String name = ((Login)LoginView1.FindControl("Login1")).UserName;
        SqlConnection source_db = new SqlConnection();
        source_db.ConnectionString = ConfigurationManager.ConnectionStrings["source"].ConnectionString;//konfiguracja polaczenia z web.cfg 
        SqlCommand sql_polecenie3 = new SqlCommand("select Status from  aspnet_Users where UserName='" + name + "';", source_db);
        try
        {
            source_db.Open();//otwiera polaczenie
            if ((int)sql_polecenie3.ExecuteScalar() == 1)
            {
                Label1.Visible = true;
            }
            else
            {
                Label1.Visible = false;
            }
            source_db.Close();//zamyka polaczenie
        }
        catch (Exception)
        {
            source_db.Close();//zamyka polaczenie
        }
    }
4

3 回答 3

2

亚历克斯,我永远不会使用你的代码......你做错了几件事,最重要的是,任何人都可以从你刚刚展示的内容中删除你的整个数据库。

首先要做的事情...

  • 您应该始终将数据库访问(数据库代码)放在不同的项目(通常是库项目- DLL)中 -请参阅我对此的回答
  • 您应该始终处置您的对象,在您的情况下,您可以安全地using在.SqlConnectionSqlCommand
  • 您应该始终使用 sql 变量,并且永远不要直接从附加代码创建 SQL 查询,除非您确定您正在清理您的输入

关于您自己的答案,如果您添加e.Cancel = true;这将告诉操作您已自定义响应并且您不希望对象继续进行自动响应。

于 2012-08-21T11:11:46.083 回答
1

Login 控件为此提供了一个事件Authenticate 。
如果您想在此基础上进行一些自定义检查并拒绝登录,您应该使用身份验证事件。

<asp:Login id="Login1" runat="server"
                OnAuthenticate="OnAuthenticate">
            </asp:Login>



private void OnAuthenticate(object sender, AuthenticateEventArgs e)
{
    bool Authenticated = false;
    Authenticated = SiteSpecificAuthenticationMethod(Login1.UserName, Login1.Password);

    e.Authenticated = Authenticated;
}
于 2012-08-21T11:12:54.307 回答
0

答案是添加 e.Cancel = true 或 false 取决于我们何时要取消登录。

于 2012-08-21T11:06:58.363 回答