公司有個小需求,要求賬號不能同時登錄在多台電腦上,就像那個微信或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); } }