Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证只有一个用户登录到一个帐户_Javascript_Php_Security_Ip_Web Deployment - Fatal编程技术网

Javascript 验证只有一个用户登录到一个帐户

Javascript 验证只有一个用户登录到一个帐户,javascript,php,security,ip,web-deployment,Javascript,Php,Security,Ip,Web Deployment,我正在开发一个网站,我想做一些安全程序,我想确保只有一个用户可以从一台计算机登录到他的帐户 那么,我如何用php甚至javascript代码处理这个问题呢 注意:我尝试使用$\u服务器['REMOTE\u ADDR'],但IP不稳定。您只需在用户表中添加一列(在线)。当用户登录时,设置为true。注销时,设置为false。你也需要与会话一起工作。保存要验证的用户会话 if ( user.is_online ){ if ( user.session_id == this.session.i

我正在开发一个网站,我想做一些安全程序,我想确保只有一个用户可以从一台计算机登录到他的帐户

那么,我如何用php甚至javascript代码处理这个问题呢


注意:我尝试使用
$\u服务器['REMOTE\u ADDR']
,但IP不稳定。

您只需在用户表中添加一列(在线)。当用户登录时,设置为true。注销时,设置为false。你也需要与会话一起工作。保存要验证的用户会话

if ( user.is_online ){
    if ( user.session_id == this.session.id )
        //OK, same user log in.
    else
        //OPS, different sessions, other user log in.
}
else {
    //user log in first time
}
很抱歉代码太差,我没有用php编写代码,但是这个验证必须是服务器端的

@更新

如果用户未注销就离开了网站,则需要再添加一次验证。检查会话状态是否处于活动状态。如果不是,则left为_online true,并将会话更改为新会话。在中了解更多信息


也许,您需要运行一些cron来销毁非活动会话。我不知道这是否是最好的选择。

在PHP中,当用户登录时,将其IP或MAC地址保存到您拥有的任何userAuth表中。然后,当他们下次登录时,检查是否是同一个MAC地址。我想这是最简单的方法。此外,如果他们没有退出上一个会话,您可以简单地锁定第二次登录尝试。然而真正的IP不稳定,它会改变,我也无法获得Mac地址。好吧,当用户登录时,创建一个唯一的MD5哈希(比如,哈希用户名、日期时间等等)。将其保存在本地存储和服务器上的auth表中。如果它们不匹配,这是一个新会话。这是一个很好的解决方案,但我如何将其存储在本地???将为您提供一些关于本地存储(客户端)的指针,PHP数据库的内容应该非常简单,只需向表中添加另一个字段即可。很好。session.id通常是MD5,正如我在评论中所描述的那样。说得好!因此,如果我没有真正注销,只需关闭浏览器。然后我不再在线,但我仍然无法在其他地方登录。这是一个问题,如果会话被破坏,那么用户被“锁定”,因为DB认为它在线,但没有匹配的会话。是的。使用PHP中的session_status,可以获得会话的实际状态。如果为false,则用户未注销就离开了网站。