B/S如何判断机器的唯一性?

zhaoyuhongwoaini2 2011-09-07 04:12:01
我们做的事企业应用。但是偶尔外网也能访问。大部分在内网。

我现在登录要做到一个用户只能在一台机器上登录。单独判断IP不行。MAC又获取不到。还有什么好办法吗

有的贴代码分全部送上
...全文
177 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingdongfang 2011-09-07
  • 打赏
  • 举报
回复
也就是说,与机器的唯一性没有关系
xingdongfang 2011-09-07
  • 打赏
  • 举报
回复
>>我现在登录要做到一个用户只能在一台机器上登录

这是你的需求,它与你要问的问题没有关系。
xuStanly 2011-09-07
  • 打赏
  • 举报
回复

function GetPCInfo(){
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_Processor");
var e = new Enumerator (properties);
return e.item().ProcessorID;
}


给楼主一段没用的代码吧,这个是用js取cpuid的,不过基本上通不过浏览器安全限制。
  • 打赏
  • 举报
回复
至于当用户登录时你去判断其它会话上有没有同一个用户已经登录,我想这不是什么技术难题吧。这个限制其实并不很必要,因为毕竟你还是允许人家登录的,只不过不要跟另外一个会话使用的用户名相同而已。

然后在大多数程序中,没有必要区分这个。同一个用户在多个会话上登录,对应用程序完全不会产生什么影响。
  • 打赏
  • 举报
回复
程序是人家的(人家花钱买的),服务器是人家的,何必这样严格地限制?

限制一段时间内(比如每一个小时)最多可以有多少个会话允许访问服务器就行了。当会话数超过,就不让登录吧。
Im_Sorry 2011-09-07
  • 打赏
  • 举报
回复
using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Management;

namespace Test
{
/// <summary>
/// Computer Information
/// </summary>
public class Computer
{
public string CpuID;
public string MacAddress;
public string DiskID;
public string IpAddress;
public string LoginUserName;
public string ComputerName;
public string SystemType;
public string TotalPhysicalMemory; //单位:M
private static Computer _instance;
public static Computer Instance()
{
if (_instance == null)
_instance = new Computer();
return _instance;
}
protected Computer()
{
CpuID=GetCpuID();
MacAddress=GetMacAddress();
DiskID=GetDiskID();
IpAddress=GetIPAddress();
LoginUserName=GetUserName();
SystemType=GetSystemType();
TotalPhysicalMemory=GetTotalPhysicalMemory();
ComputerName=GetComputerName();
}
string GetCpuID()
{
try
{
//获取CPU序列号代码
string cpuInfo = "";//cpu序列号
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
moc=null;
mc=null;
return cpuInfo;
}
catch
{
return "unknow";
}
finally
{
}

}
string GetMacAddress()
{
try
{
//获取网卡硬件地址
string mac="";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
{
mac=mo["MacAddress"].ToString();
break;
}
}
moc=null;
mc=null;
return mac;
}
catch
{
return "unknow";
}
finally
{
}

}
string GetIPAddress()
{
try
{
//获取IP地址
string st="";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
{
//st=mo["IpAddress"].ToString();
System.Array ar;
ar=(System.Array)(mo.Properties["IpAddress"].Value);
st=ar.GetValue(0).ToString();
break;
}
}
moc=null;
mc=null;
return st;
}
catch
{
return "unknow";
}
finally
{
}

}

string GetDiskID()
{
try
{
//获取硬盘ID
String HDid="";
ManagementClass mc = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
HDid = (string)mo.Properties["Model"].Value;
}
moc=null;
mc=null;
return HDid;
}
catch
{
return "unknow";
}
finally
{
}

}

/// <summary>
/// 操作系统的登录用户名
/// </summary>
/// <returns> </returns>
string GetUserName()
{
try
{
string st="";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{

st=mo["UserName"].ToString();

}
moc=null;
mc=null;
return st;
}
catch
{
return "unknow";
}
finally
{
}

}


/// <summary>
/// PC类型
/// </summary>
/// <returns> </returns>
string GetSystemType()
{
try
{
string st="";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{

st=mo["SystemType"].ToString();

}
moc=null;
mc=null;
return st;
}
catch
{
return "unknow";
}
finally
{
}

}

/// <summary>
/// 物理内存
/// </summary>
/// <returns> </returns>
string GetTotalPhysicalMemory()
{
try
{

string st="";
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{

st=mo["TotalPhysicalMemory"].ToString();

}
moc=null;
mc=null;
return st;
}
catch
{
return "unknow";
}
finally
{
}
}
/// <summary>
///
/// </summary>
/// <returns> </returns>
string GetComputerName()
{
try
{
return System.Environment.GetEnvironmentVariable("ComputerName");
}
catch
{
return "unknow";
}
finally
{
}
}


}
}
BrucesLong 2011-09-07
  • 打赏
  • 举报
回复
加域,同时判断域和ip
Alden 2011-09-07
  • 打赏
  • 举报
回复
你的要求应该是不允许一个账号同时在多个机器上登陆,企业应用应该允许一个账号在不同的机器上使用。这种情况很多公司应该使用的是域管理机制,使用windows账号处理。
kaizi_sun 2011-09-07
  • 打赏
  • 举报
回复
做浏览器 插件 是不是可以解决取 客户机信息的问题呢。没做过的随便想想
苦逼的程序员 2011-09-07
  • 打赏
  • 举报
回复
string mac = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString();
break;
}
}
这个就是客户端的MAC
zhaoyuhongwoaini2 2011-09-07
  • 打赏
  • 举报
回复
获取客户端MAC不是服务器端MAC
beiyangxiao 2011-09-07
  • 打赏
  • 举报
回复
根据客户端的IP和端口号确定
苦逼的程序员 2011-09-07
  • 打赏
  • 举报
回复
MAC可以抓到呀
string mac = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
mac = mo["MacAddress"].ToString();
break;
}
}
baysos 2011-09-07
  • 打赏
  • 举报
回复
为什么获取不到MAC?
md5e 2011-09-07
  • 打赏
  • 举报
回复
用加密狗登陆吧,判断加密狗的ID就好了
moonwrite 2011-09-07
  • 打赏
  • 举报
回复
http://zhupan.iteye.com/blog/26440
ilyzsq 2011-09-07
  • 打赏
  • 举报
回复
学习学习 观摩之中…………
MSDNXGH 2011-09-07
  • 打赏
  • 举报
回复
把用户登陆IP记录记录在数据库,操作前进行对比。

不过,这样只能明确一次,只能一个用户在线。

其它用户登陆了,原用户就会掉线,只能原用户再登陆,那其它的又会再掉线
langxingcs 2011-09-07
  • 打赏
  • 举报
回复
跟登录用户挂钩不行?

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧