C#Mysql客户端服务器应用程序.我应该如何管理在线用户

本文关键字:管理 在线 用户 何管理 服务器 客户端 应用程序 我应该 C#Mysql | 更新日期: 2023-09-27 18:21:51

所以我有一个应用程序,它可以在多个客户端上运行,每个客户端都访问中央服务器以获取数据。在客户端应用程序上,用户需要使用凭据登录才能访问该程序。我将在线用户存储在数据库的一个表中。我目前管理在线用户的方法如下:

用户登录并将其记录插入数据库的在线表中

MySqlConnection connection1 = new MySqlConnection(Class1.connString);
MySqlCommand command = connection1.CreateCommand();
command.CommandText = "INSERT INTO online (ComputerIP, ComputerName, Username, Time) " + "VALUES (@ip, @compname, @user, @datetime)";
command.Parameters.AddWithValue("@ip", getIP().NullString());
command.Parameters.AddWithValue("@compname", GetFQDN().NullString());
command.Parameters.AddWithValue("@user", user);
command.Parameters.AddWithValue("@datetime", DateTime.Now);
connection1.Open();
command.ExecuteNonQuery();
connection1.Close();

一旦他们注销或退出应用程序,就会运行代码从表中删除此记录。

MySqlConnection conn = new MySqlConnection(Class1.connString);
conn.Open();
MySqlCommand command = new MySqlCommand("DELETE FROM online WHERE ID='" + userID + "'", conn);
MySqlDataReader Reader1 = command.ExecuteReader();
conn.Close();

但是,如果用户错误地关闭程序(结束任务、强制关闭计算机、断电),则不会执行删除此记录的代码,因此,尽管用户未登录,但仍保持登录状态。

我该如何应对这些情况?我的方法是实用的,还是有更好的解决方案?

C#Mysql客户端服务器应用程序.我应该如何管理在线用户

我不知道如何绕过它,但也许你应该解释一下你想要实现什么?如果你只是想知道谁当前登录了,你能从INFORMATION_SCHEMA.PROCESLIST视图中得到你需要的吗?无论出于何种原因关闭连接时,都应更新此信息。