2010-04-10 1 views
5

C'è un modo per annullare la condivisione del nome utente (in base all'indirizzo IP o il login nello stesso momento in un'altra posizione) per Wordpress? Se c'è un plugin solo per tenere traccia dell'indirizzo IP e del tempo di accesso, dovrebbe andare bene. GraziePlugin per evitare di condividere il nome utente in Wordpress

+0

Vuoi farlo in modo che solo un singolo IP possa utilizzare un nome utente? In tal caso, bloccherai qualsiasi utente con un IP dinamico. O stai tentando di bloccare accessi simultanei dallo stesso utente? –

+0

Sto provando a bloccare il login simultaneo. –

risposta

2

puoi aggiungere questo al tuo file functions.php o un file di plugin.

//set the most current user to have a cookie matching a unique value  
add_action("set_logged_in_cookie", "one_cookie", 10, 5); 
function one_cookie($logged_in_cookie, $expire, $expiration, $user_id, $logged_in) { 
    $secure = apply_filters('secure_logged_in_cookie', false, $user_id, is_ssl()); 
    $cookie = uniqid(); 
    update_user_meta($user_id, "one_cookie", $cookie); 
    setcookie("one_cookie", $cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure, true); 
    return; 
} 
//check requests from users to ensure they have this cookie 
add_action("init", "check_one_cookie", 1); 
function check_one_cookie() { 
    $user = wp_get_current_user(); 
    if ($user->ID == 0) { return; } 
    $storedcookie = get_user_meta($user->ID, 'one_cookie'); 
    print_r(array('$storedcookie'=>$storedcookie)); 
    if (!empty($storedcookie) && $_COOKIE['one_cookie'] != $storedcookie) { 
    /*if the user doesn't have the same cookie as we have stored, log them out.*/ 
     wp_logout(); 
     //auth_redirect() may have a more desired effect 
    } 
} 
//unset a users cookie 
add_action('wp-logout', 'one_cookie_logout'); 
function one_cookie_logout() { 
    setcookie("one_cookie", "", 1); 
} 

Questo funzionerà comunque solo in una direzione. Ogni volta che viene elaborato un nuovo accesso bloccherà quello vecchio. Se desideri annullare l'operazione, probabilmente dovrai scrivere molto più codice in modo che un utente possa interrompere un blocco ecc.

È anche possibile eseguire questa operazione sostituendo le funzioni appropriate in "wp-includes/pluggable.php" '

Ho testato il codice sopra per lavorare con WordPress 3.1.

+0

nota che ciò non consentirà l'utente indipendentemente dall'IP che hanno su un utente per utente. Se si desidera consentire allo stesso utente di accedere ma da diversi IP (probabilmente non il modo migliore) basta aggiungere un meta campo utente per il proprio IP o codificarlo nel cookie e quindi verificare le richieste a tale scopo. – nullvariable

1

testato in 3.6.1 e funziona bene, tranne il "check_one_cookie" funzione deve essere aggiornato in questo modo:

add_action("init", "check_one_cookie", 1); 
    function check_one_cookie() { 
    $user = wp_get_current_user(); 
    if ($user->ID == 0) { return; } 
    $storedcookie = get_user_meta($user->ID, 'one_cookie'); 
    // print_r(array('$storedcookie'=>$storedcookie)); 
    if (!empty($storedcookie) && $_COOKIE['one_cookie'] != $storedcookie[0]) { 
    /*if the user doesn't have the same cookie as we have stored, log them out.*/ 
     wp_logout(); 
     //auth_redirect() may have a more desired effect 
    } 
} 

$ storedcookie dovrebbe essere tuttavia sostituito da $ storedcookie [0] (e non dimenticare di sostituire COOKIEPATH, COOKIE_DOMAIN con i tuoi dati)

+0

salva vita stavo impazzendo con questo haha – cppit