C# 防止同一用户在桌面应用程序上多次登录

C# 防止同一用户在桌面应用程序上多次登录,c#,mysql,vb.net,login,desktop-application,C#,Mysql,Vb.net,Login,Desktop Application,我正在开发一个多用户桌面应用程序。我需要找到一种方法,让每个用户名一次只允许一个用户登录。基本上,John不能从PC-A登录到应用程序,然后运行到PC-B并登录。我想到的是设置一个bit标志,指示用户已登录,当从其他位置进行尝试时,它将通知用户当前用户名已登录。这将重复,直到PC-A上的John退出系统或手动注销。唯一的问题是,如果应用程序崩溃,则不会调用注销方法。建议?查看MySQL的和函数。如果您不能依靠优雅地退出应用程序或至少捕获所有异常并进行适当处理,我认为唯一的选择是使用会话方法。基本

我正在开发一个多用户桌面应用程序。我需要找到一种方法,让每个用户名一次只允许一个用户登录。基本上,John不能从PC-A登录到应用程序,然后运行到PC-B并登录。我想到的是设置一个bit标志,指示用户已登录,当从其他位置进行尝试时,它将通知用户当前用户名已登录。这将重复,直到PC-A上的John退出系统或手动注销。唯一的问题是,如果应用程序崩溃,则不会调用注销方法。建议?

查看MySQL的和函数。

如果您不能依靠优雅地退出应用程序或至少捕获所有异常并进行适当处理,我认为唯一的选择是使用会话方法。基本上,当每个用户登录时,会建立一个新的会话,并根据该会话id验证未来的任何调用


通过这样做,您可以允许用户在尝试登录其他地方时终止现有/打开的会话。如果他们试图从PC B登录,并且已经从PC A登录-您只需将其放在提示中,如果他们选择从PC B继续,PC A上的会话将被停用。即使有人正在PC A上积极使用该应用程序,他们发出的下一个服务呼叫也应被拒绝,因为会话已关闭。

请看创建互斥。。这将只允许一个实例,这是我的建议..你至少可以尝试。没有人承诺你可以优雅地处理它,但至少你有机会修复数据库。你的应用程序的服务器端是什么样子的?每个客户端实例是否直接连接,但仅连接到MySQL?或者你有自己的服务器连接到MySQL吗?这是如何解决的?如果应用程序崩溃,它不会释放锁,您也有同样的问题。如果应用程序崩溃,它会释放锁。事实上,一旦连接消失,锁就会被释放。因此,每个客户端都必须保持一个永久的数据库连接在运行期间保持打开状态,而不是根据需要进行连接。我同意这违反了这一理念。数据库连接是昂贵的资源。@Bamar:链接页面声明“使用GET_lock()获得的锁在会话终止时显式释放……或隐式释放(正常或异常)。”它确实使用了资源,但如果不消耗一些资源,就无法满足他的要求。我会考虑一下这个问题,听起来这可能是我们要走的路线。谢谢你的回复。