2017-12-06 6 views
1

Ich versuche, eine Funktion zum wp_login Hook hinzufügen, die alle aktuellen Benutzeranmeldungssitzungen scannt und alle außer den letzten zwei (die aktuelle Sitzung enthält) zu zerstören. Ich möchte, dass der Benutzer auf max eingeloggt ist. zwei Geräte gleichzeitig.Destroy anderen Login Wordpress-Sitzungen mit Ausnahme der letzten zwei

ich die Sitzungen mit holen kann:

$manager = WP_User_Meta_Session_Tokens::get_instance($user->ID); 
$tokens = $manager->get_all(); 

oder:

$tokens = get_user_meta($user->ID, 'session_tokens', true); 

Aber wie können Sie diese Sitzungen während einer for-Schleife zerstören?

foreach($tokens as $token){ 
    $manager->destroy($token); 
} 

returns: hash() erwartet, dass Parameter 2 ein String ist. Die Verwendung der Schlüssel als Wert funktioniert auch nicht.

Antwort

0

verwenden ich einen anderen Ansatz für jetzt,

function limit_active_user_sessions($user_login, $user){ 

$sessions = get_user_meta($user->ID, 'session_tokens', true); 
$sessions_keys = array_keys($sessions); 
$sessions_count = count($sessions); 
$max_active_sessions = 2; 
if ($sessions_count > 2){ 
    for($i=0;$i<($sessions_count-$max_active_sessions);$i++){ 
    unset($sessions[$sessions_keys[$i]]); 
    } 
    update_user_meta($user->ID, 'session_tokens', $sessions); 
} 

add_action('wp_login', 'limit_active_user_sessions', 10, 2); 
den Trick der user_meta direkt Aktualisierung
Verwandte Themen