it-swarm.dev

Begrenzen von Sitzungen auf jeweils eine IP

Auf einer Site mit Premium-Benutzerkontoabonnements möchte ich Anmeldungen auf jeweils einen Computer beschränken können. Der einfachste Weg, dies zu erreichen, wäre das Begrenzen durch IP, aber ich hatte kein Glück, ein Plugin zu finden, um dies zu erreichen. Kennt jemand einen, mit dem ich diese Funktionalität erhalten kann?

Verwandte Themen: Anmeldesicherheitsfrage - Zeigt WP an, ob ich von mehreren Standorten aus angemeldet bin?

5
Gavin

Wie bereits in einem meiner Kommentare erwähnt, ist eine (cookiebasierte) Sitzung technisch durch die Verwendung von Safer Cookies (WordPress Plugin) auf jeweils eine IP begrenzt.

Dies verhindert nicht, dass Sie sich erneut mit demselben Benutzernamen und demselben Kennwort anmelden, da es eine Funktion von WordPress ist, mit der Sie sich mehrmals mit Ihren Anmeldeinformationen und daher mit mehreren IP-Adressen anmelden können.

Was Sie erreichen möchten, ist, dass Sie überhaupt keine Mehrfachanmeldungen vornehmen. Nach Otto ist dies nicht trivial. Stacy schreibt , dass das Wishlist Member (Wordpress Plugin) eine solche Funktionalität eingebaut hat: IP-Login Protection . Wahrscheinlich ist das Plugin oder ein Teil davon eine Lösung für Ihr Problem. IANAL , aber dieses Plugin verstößt gegen die GPL-Lizenz, da es Sie daran hindert, Ihr WordPress-Derivat zu verwenden . Ich würde es nicht benutzen.

Aber wahrscheinlich gibt es ein anderes Plugin, oder es ist ganz einfach, Login LockDown (Wordpress Plugin) zu erweitern, um die gesamte Sitzung an die zuletzt aufgezeichnete gültige IP zu binden.

5
hakre

Der Benutzer kann sich jeweils nur von einem Computer aus anmelden. Wenn der Benutzer 30 Minuten inaktiv ist, kann er sich von einem anderen Computer aus anmelden. Versuchen Sie es in verschiedenen Browsern. Sie müssen 2 Schritte machen:

  1. Erstellen Sie 2 Spalten (uni_hash, session_time) in der Tabelle wp_users in Ihrer Datenbank.
 "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./Füge diesen Code in function.php ein.

<?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');
?>
0
vaofft