销毁除最后两个之外的其他登录Wordpress会话

时间:2017-12-06 09:21:17

标签: php wordpress session login limit

我试图在 wp_login 挂钩中添加一个函数,该挂钩扫描所有当前用户登录会话,并销毁除最后两个(包含当前会话)之外的所有内容。我希望用户最多登录。同时使用两个设备。

我可以通过以下方式获取会话:

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

或:

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

但是你怎么能在for循环中销毁这些会话呢?

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

返回:hash()期望参数2为字符串。 使用键作为值也不起作用。

1 个答案:

答案 0 :(得分:0)

我现在使用了不同的方法,更新user_meta直接做了诀窍

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