请高手指教如何控制一台机器上只能有一个用户注册及登陆网站?

解决方案 »

  1.   

    关于注册:
    在程序里边取一下计算机物理名,保存到数据库用户表中。新用户注册的时候check一下。关于登录:
    如果楼主想要达到用户必须用注册时使用的计算机进行登录的话,在登录的时候也要验证下当前使用的计算机是否是注册时的计算机,如果楼主只是限制一台电脑只能登录一个用户,而不管这个用户是在哪台电脑上注册的,那就在登录时做个ip验证就行了,相当于一个ip同一时刻只能一个用户在线。
      

  2.   

    ip 登录的时候可以作为唯一区分,但是注册的时候是不可以的,一台计算机可以安装多个网卡,即使是只有一个网卡,如果ip不固定也不能保证每次去注册用户的时候ip是一样的,最保险的办法就是guid了,号称全宇宙无重复嘛。给自己id打个广告:
    guid:
    GUID 是微软对 UUID(统一唯一标识)的解释,理论上在整个空间和时间维上是唯一的,因此使用 GUID 来代替真实名称,可以防止系统中有两个相同名称的对象而造成混淆。
          一个 GUID 是一个128位长(16字节)的数,形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中前4字节为随机数;5-8字节为时间戳,记录了从1490年开始到该GUID的生成时间(低16位字在前,以分钟为单位),从而保证了时间上的唯一;9-10字节与机器重启次数有关;最后6字节一般为该机器的网卡地址(如果这台机器没有网卡,则使用另一常数),从而保证了空间上的唯一。
          在系统中,GUID 保存在注册表的 HKEY_CLASSES_ROOT 项下。HKEY_CLASSES_ROOT 其实是 HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\ 的快捷键,里面有很多长长的字串命名的子项,这些字串就是 GUID。在 HKEY_CLASSES_ROOT 下的 GUID 又分为4部分:
    程序ID:
          如 Access.Application 等,其中 Access 表示类所在 DLL/EXE 文件名,Application 是类的名称。虽然程序ID较类ID易用,但因为它并不一定是唯一的,因此可能造成混乱。在 VB 和 VJ++ 中程序员只能使用程序ID,不过这两种语言允许程序ID长达39个字符,因此完全可以取一个与 GUID 完全相同的程序ID,从而保证程序ID也是唯一的。
    CLSID:
          在这个子键下列出了在机器上注册过的所有类ID。在每个GUID键下。可以找到所有关于这个类ID的信息。如果该类ID对应一个DLL,则DLL文件名在 InprocServer32 子键下;如果是本地的一个EXE程序,则文件名在 LocalServer32 子键下;如果是远程EXE,则有一个 AppID 子键指向 AppID 键的入口。
    AppID:
          在这个子键下列出了每个远程 DLL/EXE 的启动参数,包括对象位置、文件名等。
    Interface:
          在这个子键下列出了本地系统中所有注册过的类的 GUID。在其中每个 GUID 键下,都保存着代理的类ID,当其他应用程序要与它通信时就使用这个ID传入传出参数。
      

  3.   

    1.用IP控制,不合适,IP会变动
    2.我是B/S架构,无法读取注册表,该怎么办?
      

  4.   

    <script language="JavaScript">
    <!--
    net = new ActiveXObject("WScript.Network");
    alert(net.ComputerName);
    //-->
    </script>这段脚本可以取到计算机名,不过 需要降低ie的安全等级,这么做商业应用肯定是不允许的了。
      

  5.   

    实现你的功能必须是取道客户端的唯一标识,如硬盘序列号,网卡MAC地址等等,
    B/S架构在客户端是存在权限问题的,在权限范围内考虑你这个问题是很难有一个通用的方法去实现,因此你需要采用ActiveX控件,或者专门开发一个客户端软件供用户去注册和登录。
      

  6.   

    使用Cookie如何?能够实现这个功能吗?
      

  7.   

    在注册表里写一个值 做判断。 或者在机器上写一个文件 来判断。这种是重新装系统后丢失(值记录到客护端)如果是要求重新装系统后 还能进行控制  就把数据记录到 服务器 可以记录网卡的MAC地址  来核对。