阻止用户使用其他计算机或设备登录

Sbo*_*nde 1 php security

我一直试图解决这个问题一段时间了.

我已经构建了一个在我们客户端的服务器上运行的应用程序.客户必须为每个用户购买许可证才能使用该系统.因此,每个用户在他/她的计算机上都有一个链接,只能使用该计算机访问该应用程序.每台计算机都必须为每个用户注册并存储在数据库中.

所以我必须限制用户使用另一台计算机/设备访问应用程序.我的问题是如何使用php(或任何其他语言)从每台计算机捕获唯一信息,因此我可以在每次用户尝试登录时检查此信息.我了解到你只能使用php获取浏览器信息.所以我正在寻找一些可以指引我正确方向的想法.

我试过的是在每台PC上存储唯一的cookie,并将它们注册到数据库中.但问题是我们总是遇到一些用户清除cookie而无法访问应用程序的问题.

Gol*_*rol 5

将用户链接到计算机不是一个好主意.为什么要首先创建Web应用程序的独立性和灵活性(假设它是一个Web应用程序,因为它是PHP,或者您实际上是否有命令行用户?),然后将其限制为单个设备,这可能会破坏,被盗...也许该公司没有每个用户的固定工作站,但它使用较少数量的计算机用于大量兼职员工,因此每个用户可能每天使用不同的计算机.

如果您真的想要这样的限制,最好只限制每个用户的会话数.即:在表中记录会话ID和这些会话的用户名.在每个请求上,更新表以存储请求日期时间,以便您可以检查过期的会话.使用MySQL,您可以创建一个存储类型表MEMORY,这对于会话信息来说非常快速且非常有用.重新启动数据库服务器时,数据将消失,但这通常不是此类信息的问题.

现在,有可能继续:

  1. 如果用户再次在另一台PC或浏览器上登录,它将收到一个新的会话ID.在这种情况下,在登录过程中,您可以查看会话表以查看用户是否打开了另一个会话ID.如果是,请阻止登录.

    如果会话超时,例如,当它超过15分钟时,您可以允许登录并删除旧会话.

    缺点是如果浏览器或PC崩溃,用户必须等待超时时间才能继续在另一个地点工作.这在任何工作环境中都是不可接受的.

  2. 更好的解决方案可能是:用户只能有一个"活动"会话.如果用户从另一个工作区登录,他们将自动获得新会话.如果发生这种情况,您可以接受新会话并删除旧会话ID.如果他们继续使用旧会话,您可以看到该会话不再在会话表中,要求他们再次登录.

    使用该解决方案,用户将能够在工作空间之间快速切换,而不必等待,但如果两个用户同时使用相同的用户名,他们将不得不重新登录每个请求.

但我真的会考虑两次:为什么你想要这个限制呢?如果一家公司愿意使用比允许的用户多的软件,他们也愿意改变你的PHP代码来删除这个检查,这将是微不足道的.

此外,如果您使用您的软件太烦人,他们可能会决定不使用它并搜索替代品.我认为最好相信你的客户.