2010-04-10 17 views
5

¿Hay alguna manera de anular el uso compartido de nombre de usuario (basado en la dirección IP o iniciar sesión al mismo tiempo en una ubicación diferente) para Wordpress? Si hay un complemento solo para rastrear la dirección IP y el tiempo de inicio de sesión, también debería estar bien. GraciasPlugin para evitar compartir nombre de usuario en Wordpress

+0

¿Desea que solo una IP pueda usar un nombre de usuario? Si es así, vas a bloquear a cualquier usuario con una dirección IP dinámica. ¿O intenta bloquear inicios de sesión simultáneos del mismo usuario? –

+0

Estoy intentando bloquear el inicio de sesión simultáneo. –

Respuesta

2

puede agregar esto a su functions.php o un archivo de complemento.

//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); 
} 

Esto funcionará en una sola dirección. Cada vez que se procesa un nuevo inicio de sesión, se bloqueará el anterior. Si desea revertir eso, probablemente necesite escribir mucho más código para que un usuario pueda romper un bloqueo, etc.

También puede lograr esto reemplazando las funciones apropiadas en 'wp-includes/pluggable.php '

He probado el código anterior para trabajar con WordPress 3.1.

+0

tenga en cuenta que esto no permitirá al usuario, independientemente de la IP que tenga para cada usuario. Si desea permitir que el mismo usuario inicie sesión pero desde diferentes direcciones IP (probablemente no sea la mejor) simplemente agregue un campo meta de usuario para su IP o codifíquelo en la cookie y luego verifique las solicitudes con eso. – nullvariable

1

Probado en 3.6.1 y funciona bien, excepto el "check_one_cookie" función tiene que ser actualizado como esto:

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 debe relaced por $ storedcookie [0] (y no olvide reemplazar el COOKIEPATH, COOKIE_DOMAIN por sus propios datos)

+0

salvavidas me estaba volviendo loco con esto jaja – cppit

Cuestiones relacionadas