首页 新闻 会员 周边 捐助

小问题,大难度,asp.net大神进

0
悬赏园豆:40 [已解决问题] 解决于 2013-01-06 13:13

最近有人给我布置了一个题目,题目很简单:利用b/s架构实现一个电脑只能实现一个用户登录;且每个用户只能在一台电脑上登录。

今天查了一天的资料,按照自己的思路做完了但是被否定了说用户体验不好。

我利用ajax效果,用户登录以后客户端在一定时间内,发送数据库服务器,来保证客户端的是登录着的。还有一个问题用ip地址来间接或者mac地址,但是发现这个c#代码还是有问题的,不能获取不在同一个局域网内的mac地址。

求大神给我一点思路……

唯吴独尊的主页 唯吴独尊 | 小虾三级 | 园豆:707
提问于:2012-12-26 16:54
< >
分享
最佳答案
0

暂时解决了一个用户只能登录一个地方的问题,但是同一台电脑不允许两个用户同时使用的暂时无解

唯吴独尊 | 小虾三级 |园豆:707 | 2013-01-06 13:12
其他回答(5)
0

貌似每个包都会带mac地址的吧,LZ没找到调用的接口吗?

kklin | 园豆:203 (菜鸟二级) | 2012-12-26 16:57

你说的是广域网吧,但是如果是局域网的话,那路由器应该会过滤掉吧?具体我也没有抓过报。晚上用fiddler2抓包试试看

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-12-26 17:01
0

bs只能获得ip信息,得不到mac地址啊

收获园豆:20
飞来飞去 | 园豆:2057 (老鸟四级) | 2012-12-26 17:09
0
Launcher | 园豆:45050 (高人七级) | 2012-12-26 17:18

js要设置ie的权限,我想我们组长肯定说从用户体验考虑不合理

还有别的参考方向吗?不要往我这里写的走

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-12-26 18:45

@唯吴独尊: 没了,MAC只能这么取。根据TCP/IP协议,源MAC地址始终是离目标机器最近的一个网络设备,也就是说,在没有特别的硬件和软件支持下,目标机器只能从IP包中得到离它最近的一个网络设备的MAC地址。所以,客户端必须主动提交自己的MAC地址。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-12-27 09:11
0

好像只能用IP地址,如果发现当前IP地址已经有用户登录,就强制下线

收获园豆:20
卒子 | 园豆:588 (小虾三级) | 2012-12-26 21:35

IP地址我分析过还是会有问题的,如果是局域网访问你的网站,那么他的IP地址就是路由器端口的IP(就是这个外网的IP),但是局域网的用户不可能只有一个用户把!

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-12-26 21:37

@唯吴独尊: 这个没有问题啊,把登录名和IP都记录下来,其实只要保证没有重复的登录名就行了,至于一个电脑只能登录一个用户可以使用cookie记录部分登录信息。后一个登录用户综合覆盖前一个人

支持(0) 反对(0) 卒子 | 园豆:588 (小虾三级) | 2012-12-26 21:45

@卒子: 其实我想说的是你的需求和我的不一样了,首先我这里要做的是在线用户当别人再次登录的时候,则提示用户在线对话框,而不是你说的把别人挤掉。不过还是谢谢你的想法

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-12-27 15:18
0

var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var PRoperties = service.ExecQuery("SELECT * FROM Win32_Processor");
var e = new Enumerator(PRoperties);
document.write("<table border=1>");
for (; !e.atEnd(); e.moveNext()) {
var p = e.item();
document.write("<tr>");
document.write("<td>" + p.Caption + "</td>");
document.write("<td>" + p.DeviceID + "</td>");
document.write("<td>" + p.Name + "</td>");
document.write("<td>" + p.CpuStatus + "</td>");
document.write("<td>" + p.Availability + "</td>");
document.write("<td>" + p.Level + "</td>");
document.write("<td>" + p.ProcessorID + "</td>");
document.write("<td>" + p.SystemName + "</td>");
document.write("<td>" + p.ProcessorType + "</td>");
document.write("</tr>");
}
document.write("</table>");

 

 

用这个js看看 

死白的man | 园豆:2135 (老鸟四级) | 2012-12-27 09:07

这个js是获取客户端的/CPU 信息

支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2012-12-27 09:08

主板信息 

 var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
      var service = locator.ConnectServer(".");
      var properties = service.ExecQuery("SELECT * FROM Win32_BaseBoard");
      var e = new Enumerator (properties);
      document.write("<table border=1>");
      for (;!e.atEnd();e.moveNext ())
      {
            var p = e.item ();
            document.write("<tr>");
            document.write("<td>" + p.HostingBoard + "</td>");
            document.write("<td>" + p.Manufacturer + "</td>");
            document.write("<td>" + p.PoweredOn + "</td>");
            document.write("<td>" + p.Product + "</td>");
            document.write("<td>" + p.SerialNumber + "</td>");
            document.write("<td>" + p.Version + "</td>");
            document.write("</tr>");
      }
      document.write("</table>");

支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2012-12-27 09:09

@死白的man: 这个方法昨天我已经看到过了,但是这个方法有一个不好的地方就是,需要客户端在ie上设置ie的权限,我想我们组长会说,你觉得从用户体验方面考虑设计的合理吗?所以还是谢谢你的方法。

支持(0) 反对(0) 唯吴独尊 | 园豆:707 (小虾三级) | 2012-12-27 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册