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

时间:2014-01-22 01:35:17

标签: c# mysql sql

我计划用C#编写一个应用程序,它一次只允许一个登录用户连接。我的SQL数据库中有一个名为LoggedOn的bit列,登录时我会检查数据库是否显示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

1 个答案:

答案 0 :(得分:1)

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

如果您希望在数据库中保留Loggedon以确保用户未从世界上任何其他位置登录到系统,您可以使用心跳计时器来更新Loggedon的值。因此,客户端将在几分钟内更新数据库以指示用户仍然登录。这将处理应用程序崩溃的情况。

还有其他方法:如果用户再次登录,您可以注销用户的所有其他会话。或者你可以有一个看门狗定时器而不是心跳 - 非常相似,但看门狗基本上确保长时间运行的会话非常活跃