繁体   English   中英

一次只允许每个用户一次登录

[英]Only allow a single login per user at a time

我打算用C#编写一个应用程序,该应用程序一次只允许一个登录用户连接。 我将有一个bit我叫LoggedOn SQL数据库列,并在登录时,我会让它检查数据库说loggedon = true如。

if (Loggedon == true) {
    //Login things
} else {
    //it appears you are already logged on.
}

我的问题是,如果我的程序意外关闭该怎么办?

例如:强制关闭或任务管理器结束进程,如何在有人这样做之前运行查询,以防止对我的数据库进行任何更改。

我不确定我是否解释得足够好,但是这是我的代码

   protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        string myConnection = "******;";
        MySqlConnection conn = new MySqlConnection(myConnection);
        conn.Open();
        MySqlCommand comm = conn.CreateCommand();
        comm.CommandText = "INSERT INTO users LoggedOn = 'False' where username = '" + Form1.TextBoxText + "'";
        comm.ExecuteNonQuery();
        conn.Close();
        base.Dispose(disposing);
    }

这段代码会覆盖所有意外关闭吗?是否有其他简便快捷的方法?

事件处理程序可以解决我的问题吗? 例如: http : //msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

连同单例和Loggedon持久性,以下内容将有助于解决应用程序崩溃的情况:

如果您希望将Loggedon持久保存在数据库中以确保用户没有从世界其他任何地方登录到系统,则可以使用心跳计时器以使Loggedon的值保持更新。 因此,每隔几分钟,客户端将更新数据库以指示用户仍在登录。 这将处理应用程序崩溃的情况。

还有其他类似的方法:如果用户再次登录,则可以注销该用户的所有其他会话。 或者,您可以使用看门狗计时器来代替心跳-非常相似,但是看门狗实质上可以确保长时间运行的会话实际上处于活动状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM