一次将会话限制为一个IP

时间:2010-11-18 作者:Gavin

在具有高级用户帐户订阅的网站上,我希望能够限制每次登录一台计算机。要做到这一点,最直接的方法是通过IP进行限制,但我还没有找到一个插件来实现这一点。有人知道我可以使用哪一个来获得此功能吗?

相关:Login security question - Does WP show me if I\'m logged in from multiple locations?

2 个回复
最合适的回答,由SO网友:hakre 整理而成

正如我在上面的评论中所建议的,从技术上讲,通过使用Safer Cookies (WordPress Plugin).

这并不阻止使用相同用户名和密码进行另一次登录,因为WordPress的一项功能是允许您使用凭据多次登录,从而使用多个IP。

您想要实现的是完全防止多次登录。According to Otto, 这不是小事。Stacy writes, 那Wishlist Member (Wordpress Plugin) 内置了这样的功能:IP-Login Protection. 因此,该插件或其部分可能是您问题的解决方案。IANAL, 但该插件违反了GPL许可证,因为它restricts you to make use of your wordpress derivate. 我不会用它。

但可能还有另一个插件可用,或者很容易扩展Login LockDown (Wordpress Plugin) 将整个会话绑定到记录的最后一个有效IP。

SO网友:vaofft

用户一次只能从一台计算机登录。如果用户停用30分钟,他可以从另一台计算机登录。在不同的浏览器中尝试。您必须执行两个步骤:

在数据库中的wp\\U用户表中创建2列(uni\\U哈希、会话时间)

  "ALTER TABLE  `wp_users` ADD COLUMN `uni_hash` VARCHAR( 80 ) NOT NULL";
  "ALTER TABLE  `wp_users` ADD COLUMN `session_time` int(11) DEFAULT NULL";
2./在函数中粘贴此代码。php。

<?php
function myStartSession() {
    if(!session_id()) {
        session_start();}
}

function myEndSession() {
    session_unset();
    session_destroy(); 
}

if( !function_exists(\'single_user_login_uid_create\')){
    function single_user_login_uid_create($ID){
            global $wpdb;
            $get_hash = $wpdb->get_results("SELECT uni_hash FROM `wp_users` WHERE user_login=\'".$ID."\'");           
            if(isset($_COOKIE["user_uni_uid".$ID.""])){
                     $user_uni_uid = $_COOKIE["user_uni_uid".$ID.""];                    
                     if($get_hash[0]->uni_hash == \'\'){ $hash_result = $_COOKIE["user_uni_uid".$ID.""];}
                        else{$hash_result = $get_hash[0]->uni_hash; }   
                }else{
                     $user_uni_uid = \'hash\';
                     if($get_hash[0]->uni_hash != \'\'){ $hash_result = $get_hash[0]->uni_hash;}
                        else{$hash_result = \'hash\'; }               
                     }

                     $check_time = $wpdb->get_results("SELECT session_time FROM `wp_users` WHERE user_login=\'".$ID."\'");            
                     if(!is_null($check_time)){$time_result = $check_time[0]->session_time;}
                     else{$time_result = time()-2000;}  

            if( (time() - $time_result < 1800)&&($hash_result != $user_uni_uid) ){
                     myEndSession();
                     wp_clearcookie();
                     wp_die(\'<h1>User is login! </h1>\', \'\', array( \'back_link\' => true ));                   
                     do_action(\'wp_logout\');
                     nocache_headers();
                     $redirect_to = home_url();
                     wp_redirect($redirect_to);                  
                     exit();            
                }else{                                   
                     $_SESSION["LAST_ACTIVITY"] = time();
                     $new_time = $_SESSION["LAST_ACTIVITY"];
                     $randUID = md5(microtime().$_SERVER[\'REMOTE_ADD\'] );
                     $sql = "UPDATE  `wp_users` set `uni_hash`=\'".$randUID."\', `session_time`=\'".$new_time."\' WHERE user_login=\'".$ID."\'";
                     $wpdb->get_results($sql);
                     setcookie("user_uni_uid", $randUID, 9999999999);
                }       
            }
        } 

if( !function_exists(\'single_user_login_uid_check\')){
    function single_user_login_uid_check(){
        global $wpdb;       
        $ID = wp_get_current_user();
        $logout_url = wp_logout_url(home_url());
        $user_uni_uid = $_COOKIE["user_uni_uid".$ID->user_login.""];
        $sql = "SELECT  uni_hash FROM  `wp_users` WHERE uni_hash=\'".$user_uni_uid."\'";      
        $getinfo = $wpdb->get_results($sql); 
        $check_time = $wpdb->get_results("SELECT session_time FROM `wp_users` WHERE user_login=\'".$ID->user_login."\'");         
        if(!is_null($check_time)){$time_result = $check_time[0]->session_time;}
        else{$time_result = time()-2000;}       

        if(($getinfo[0]->uni_hash != $user_uni_uid)&&(time() - $time_result < 1800)&&(is_user_logged_in()) ){
            wp_clearcookie();
            myEndSession();
            do_action(\'wp_logout\');
            nocache_headers();
            $redirect_to = home_url();
            wp_redirect($redirect_to);
            exit();
        }else{
            myStartSession();
            if(!isset($_SESSION["LAST_ACTIVITY"])){$_SESSION["LAST_ACTIVITY"] = time(); }           
            elseif (time() - $_SESSION["LAST_ACTIVITY"] > 120) {
               $_SESSION["LAST_ACTIVITY"] = time();
            }              
               $new_time = $_SESSION["LAST_ACTIVITY"];
               $sql = "UPDATE  `wp_users` set `session_time`=\'".$new_time."\' WHERE user_login=\'".$ID->user_login."\'";
               $wpdb->get_results($sql);            
        }       
    }
}
add_action(\'wp_login\', \'myStartSession\', 1);
add_action(\'wp_login\',\'single_user_login_uid_create\');
add_action(\'wp_logout\', \'myEndSession\');
add_action(\'init\',\'single_user_login_uid_check\');
?>

相关推荐

如何从Meta Description中剥离引语?

我检查了HTML验证程序。但是,信息如下。属性名称中的引号。可能的原因:前面某个地方缺少匹配的引号。元描述是从内容自动生成的。因此,如果内容包含引用,它也包含在元描述中。我想去掉报价单。目前,我在标题中插入了代码。php如下所示。$description = strip_shortcodes($description); $description = wp_strip_all_tags($description); 我应该补充什么?

一次将会话限制为一个IP - 小码农CODE - 行之有效找到问题解决它

一次将会话限制为一个IP

时间:2010-11-18 作者:Gavin

在具有高级用户帐户订阅的网站上,我希望能够限制每次登录一台计算机。要做到这一点,最直接的方法是通过IP进行限制,但我还没有找到一个插件来实现这一点。有人知道我可以使用哪一个来获得此功能吗?

相关:Login security question - Does WP show me if I\'m logged in from multiple locations?

2 个回复
最合适的回答,由SO网友:hakre 整理而成

正如我在上面的评论中所建议的,从技术上讲,通过使用Safer Cookies (WordPress Plugin).

这并不阻止使用相同用户名和密码进行另一次登录,因为WordPress的一项功能是允许您使用凭据多次登录,从而使用多个IP。

您想要实现的是完全防止多次登录。According to Otto, 这不是小事。Stacy writes, 那Wishlist Member (Wordpress Plugin) 内置了这样的功能:IP-Login Protection. 因此,该插件或其部分可能是您问题的解决方案。IANAL, 但该插件违反了GPL许可证,因为它restricts you to make use of your wordpress derivate. 我不会用它。

但可能还有另一个插件可用,或者很容易扩展Login LockDown (Wordpress Plugin) 将整个会话绑定到记录的最后一个有效IP。

SO网友:vaofft

用户一次只能从一台计算机登录。如果用户停用30分钟,他可以从另一台计算机登录。在不同的浏览器中尝试。您必须执行两个步骤:

在数据库中的wp\\U用户表中创建2列(uni\\U哈希、会话时间)

  "ALTER TABLE  `wp_users` ADD COLUMN `uni_hash` VARCHAR( 80 ) NOT NULL";
  "ALTER TABLE  `wp_users` ADD COLUMN `session_time` int(11) DEFAULT NULL";
2./在函数中粘贴此代码。php。

<?php
function myStartSession() {
    if(!session_id()) {
        session_start();}
}

function myEndSession() {
    session_unset();
    session_destroy(); 
}

if( !function_exists(\'single_user_login_uid_create\')){
    function single_user_login_uid_create($ID){
            global $wpdb;
            $get_hash = $wpdb->get_results("SELECT uni_hash FROM `wp_users` WHERE user_login=\'".$ID."\'");           
            if(isset($_COOKIE["user_uni_uid".$ID.""])){
                     $user_uni_uid = $_COOKIE["user_uni_uid".$ID.""];                    
                     if($get_hash[0]->uni_hash == \'\'){ $hash_result = $_COOKIE["user_uni_uid".$ID.""];}
                        else{$hash_result = $get_hash[0]->uni_hash; }   
                }else{
                     $user_uni_uid = \'hash\';
                     if($get_hash[0]->uni_hash != \'\'){ $hash_result = $get_hash[0]->uni_hash;}
                        else{$hash_result = \'hash\'; }               
                     }

                     $check_time = $wpdb->get_results("SELECT session_time FROM `wp_users` WHERE user_login=\'".$ID."\'");            
                     if(!is_null($check_time)){$time_result = $check_time[0]->session_time;}
                     else{$time_result = time()-2000;}  

            if( (time() - $time_result < 1800)&&($hash_result != $user_uni_uid) ){
                     myEndSession();
                     wp_clearcookie();
                     wp_die(\'<h1>User is login! </h1>\', \'\', array( \'back_link\' => true ));                   
                     do_action(\'wp_logout\');
                     nocache_headers();
                     $redirect_to = home_url();
                     wp_redirect($redirect_to);                  
                     exit();            
                }else{                                   
                     $_SESSION["LAST_ACTIVITY"] = time();
                     $new_time = $_SESSION["LAST_ACTIVITY"];
                     $randUID = md5(microtime().$_SERVER[\'REMOTE_ADD\'] );
                     $sql = "UPDATE  `wp_users` set `uni_hash`=\'".$randUID."\', `session_time`=\'".$new_time."\' WHERE user_login=\'".$ID."\'";
                     $wpdb->get_results($sql);
                     setcookie("user_uni_uid", $randUID, 9999999999);
                }       
            }
        } 

if( !function_exists(\'single_user_login_uid_check\')){
    function single_user_login_uid_check(){
        global $wpdb;       
        $ID = wp_get_current_user();
        $logout_url = wp_logout_url(home_url());
        $user_uni_uid = $_COOKIE["user_uni_uid".$ID->user_login.""];
        $sql = "SELECT  uni_hash FROM  `wp_users` WHERE uni_hash=\'".$user_uni_uid."\'";      
        $getinfo = $wpdb->get_results($sql); 
        $check_time = $wpdb->get_results("SELECT session_time FROM `wp_users` WHERE user_login=\'".$ID->user_login."\'");         
        if(!is_null($check_time)){$time_result = $check_time[0]->session_time;}
        else{$time_result = time()-2000;}       

        if(($getinfo[0]->uni_hash != $user_uni_uid)&&(time() - $time_result < 1800)&&(is_user_logged_in()) ){
            wp_clearcookie();
            myEndSession();
            do_action(\'wp_logout\');
            nocache_headers();
            $redirect_to = home_url();
            wp_redirect($redirect_to);
            exit();
        }else{
            myStartSession();
            if(!isset($_SESSION["LAST_ACTIVITY"])){$_SESSION["LAST_ACTIVITY"] = time(); }           
            elseif (time() - $_SESSION["LAST_ACTIVITY"] > 120) {
               $_SESSION["LAST_ACTIVITY"] = time();
            }              
               $new_time = $_SESSION["LAST_ACTIVITY"];
               $sql = "UPDATE  `wp_users` set `session_time`=\'".$new_time."\' WHERE user_login=\'".$ID->user_login."\'";
               $wpdb->get_results($sql);            
        }       
    }
}
add_action(\'wp_login\', \'myStartSession\', 1);
add_action(\'wp_login\',\'single_user_login_uid_create\');
add_action(\'wp_logout\', \'myEndSession\');
add_action(\'init\',\'single_user_login_uid_check\');
?>