场景:
客户在使用系统过程中,系统中的数据会与外围耗材的唯一编号相关,为了防止误用他人耗材提出此需求。
解决办法:
逻辑层(示例代码,正式使用自己优化):
1
单点登录#region 单点登录
2
/**//// <summary>
3
/// 单点登录验证
4
/// </summary>
5
/// <param name="strUserID"></param>
6
/// <param name="strLocalName"></param>
7
/// <param name="strMacAddress"></param>
8
/// <returns></returns>
9
public string SSOLogin(string strUserID, string strLocalName, string strMacAddress)
10
{
11
string strOldLocalName;
12
string strOldMacAddress;
13
string strSql = string.Format(@"select city,state from tub_user where userid = '{0}'",strUserID);
14
DataSet ds = ServiceManager.GetDatabase().GetEntity(strSql, "tub_user");
15
16
strOldLocalName = ds.Tables[0].Rows[0]["city"].ToString();
17
strOldMacAddress = ds.Tables[0].Rows[0]["state"].ToString();
18
19
if (strOldMacAddress == "" || strOldMacAddress == strMacAddress)
20
{
21
string strUpdate = string.Format(@"update tub_user set city = '{0}',state = '{1}' where userid ='{2}'",strLocalName,strMacAddress,strUserID);
22
ServiceManager.GetDatabase().ExecuteNonQuery(strUpdate);
23
return "";
24
}
25
else
26
{
27
return strOldLocalName;
28
}
29
}
30
/**//// <summary>
31
/// 单点登录退出
32
/// </summary>
33
/// <param name="strUserID"></param>
34
public void SSOLogout(string strUserID)
35
{
36
string strUpdate = string.Format(@"update tub_user set city = '',state = '' where userid ='{0}'", strUserID);
37
ServiceManager.GetDatabase().ExecuteNonQuery(strUpdate);
38
}
界面层,登录时代码:
1
//增加单点登录验证
2
string strSSO = Provider.ConfigService.SSOLogin(Security.UserID, System.Net.Dns.GetHostName() + "("+System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0].ToString()+")", CheckAddress());
3
if (strSSO != "")
4
{
5
MessageBox.Show("您已经在机器名为 " + strSSO + " 的计算机上进行登录,\n如非正常退出请回到原计算重新登录并安全退出!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
6
Environment.Exit(0);
7
}
退出时代码:
1
Provider.ConfigService.SSOLogout(Security.UserID);