Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 阻止已登录用户的登录_C#_Asp.net_Session_Authentication - Fatal编程技术网

C# 阻止已登录用户的登录

C# 阻止已登录用户的登录,c#,asp.net,session,authentication,C#,Asp.net,Session,Authentication,您好,所以我想检查数据库上的用户是否已经登录,然后如果他登录停止登录在这里是我的代码样本thx的帮助 protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e) { String name = ((Login)LoginView1.FindControl("Login1")).UserName; SqlConnection source_db = new SqlConnect

您好,所以我想检查数据库上的用户是否已经登录,然后如果他登录停止登录在这里是我的代码样本thx的帮助

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
        }
    }

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

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

第一件事优先

  • 您应该始终在不同的项目(通常是库项目-DLL)中拥有数据库访问权限(数据库代码)
  • 您应该始终处理您的对象,在您的情况下,您可以安全地在
    SqlConnection
    SqlCommand
    中使用
    using
    关键字
  • 您应该始终使用sql变量,并且永远不要直接从附加代码创建sql查询,除非您确定您是这样做的

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

登录控件为此提供事件。
如果要执行一些自定义检查并在此基础上拒绝登录,则应使用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;
}

身份验证上的私有无效(对象发送方、AuthenticateEventArgs e)
{
bool=false;
Authenticated=SiteSpecificAuthenticationMethod(Login1.UserName,Login1.Password);
e、 已认证=已认证;
}

您只想检查数据库中是否存在该用户(根据数据库验证用户凭据)?可能重复:没有,工作正常,只需中断登录控件的登录。@Alex-您的问题不清楚。你应该已经在使用一个控件,该控件根据用户配置文件状态隐藏/显示内容。我相信他想要我也想要的东西。这是一种获取用户名或id并检查此人是否已登录另一台计算机的方法。同时防止他们同时登录。这始终是一个很好的做法,你可以学到一些新东西,而且你可以从同事中脱颖而出;)