c# winform实现同时只允许账号在一台电脑登录的功能
公司有个小需求,要求账号不能同时登录在多台电脑上,就像那个微信或QQ一样,如果一台电脑登录了,原来登录的就自动退出了(网上搜索点单点登录,发现有些出入,人家是实现一次登录在多个系统间认证的)
找了些资料,最后发现还是通过数据库来验证用户是否是在其它电脑上登录最为有效了,实现也简单,最关键的部分就是用户登录时生成一个不重复的字符串,这里我用的是生成一个guid来作为标志.
第一步: 用户登录,生成一个guid,用账号查询登录列表中是否有登录的信息,如果有登录信息,则用guid更新标志,如果没有,新增一条登录信息,包括用户账号、标志、登录时间信息
第二步: 进入程序后用一个时钟来定期查询登录列表,查看标志信息是不是自己登录时所生成的标志。如果是说明没有在别的电脑上登录,如果不是,说明有人在其他电脑上登录了。
第三步: 检测到其它用户登录后弹出提醒,用户点击提醒后自动结束当前程序。
第四步: 如果是用户主动退出程序时,则清理掉登录缓存的信息
道理想通了代码实现起来就非常简单了,一条查询数据表的函数就解决问题了。
private void T_Check_Tick(object sender, EventArgs e) { //检测是否有其它用户登录,0表示已经有其它用户登录了 string sql = "select count(*) from 收据_登录缓存 where session='"+session+"'"; int x=Convert.ToInt32(hr.executeOneSQL(sql,"")); if (x == 0) { T_Check.Enabled = false; MessageBox.Show(tm.info6, "退出提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); System.Environment.Exit(0); } }