WordPress 禁止多个人登录同一用户帐号

许多 WordPress 都是开放注册的,又有不少的站点是在做交易站点,可以进行购买实物在线交易的,在线交易的站点往往是禁止同一个帐号多人使用的,而在 WordPress 中是没有限制的,也就是说一个帐号可以进行共享,然后多人同时重复登录的,这给交易带来了困难,也带来一定的安全问题。

而对于如何禁止同一个注册帐号同时重复登录的问题,有简单的插件来实现,如:Prevent Concurrent Logins 或 Wp Single Login,这 2 个插件都不需多余设置,任选其一安装启用即可。

当然,不想用插件的话,也可以通过在 functions.php 中添加如下代码(来自上面的插件 Prevent Concurrent Logins)的方法来解决这个问题:

/**
 * WordPress 禁止多个人登录同一用户帐号
 */
function pcl_user_has_concurrent_sessions() {
            return ( is_user_logged_in() && count( wp_get_all_sessions() ) > 1 );
    }
    //用户当前会话数组
    function pcl_get_current_session() {
            $sessions = WP_Session_Tokens::get_instance( get_current_user_id() );
            return $sessions->get( wp_get_session_token() );
    }
    //如果用户会话更新则销毁其他会话
    function pcl_disallow_account_sharing() {
            if ( ! pcl_user_has_concurrent_sessions() ) {
                    return;
            }
            $newest = max( wp_list_pluck( wp_get_all_sessions(), 'login' ) );
            $session = pcl_get_current_session();
            if ( $session['login'] === $newest ) {
                    wp_destroy_other_sessions();
            } else {
                    wp_destroy_current_session();
            }
    }
add_action( 'init', 'pcl_disallow_account_sharing' );


WordPress