如果用户已在其他设备上登录,如何从受限页面注销用户?

时间:2015-09-30 作者:Christy

希望有人能帮助我。我和我的客户在这个项目上已经到了紧要关头,我似乎无法找到解决这个问题的办法。

我目前正在使用WP Bouncer将登录到用户帐户的设备数量限制为一台设备。我有组插件设置来限制网站上的某些页面。

问题是:一旦另一个设备登录,WP Bouncer插件就会让用户注销一个设备。但是,用户必须转到另一个页面才能看到他们已注销。这给我的客户带来了问题。一旦用户位于一台设备上的受限页面上,他就可以登录另一台设备并查看相同的受限页面,从而允许两台设备同时查看该页面。是否有方法定期检查用户是否登录?我不想使用任何空闲的用户插件,因为受限制的页面包括视频和数字杂志。如有任何建议,将不胜感激!

1 个回复
最合适的回答,由SO网友:Nate Allen 整理而成

我将使用AJAX检查用户是否登录。你可以使用setInterval 每30秒检查一次。

我测试了以下代码,它可以正常工作。首先,在主题目录中创建一个名为ajax.js 并将此代码放入其中:

(function ( $ ) {
    var check_user_is_logged_in = function(){
        $.ajax({
            type: \'POST\',
            url: ajax_object.ajax_url,
            data: {action:\'is_user_logged_in\'},
            success:function(data) {
                if ( data == \'no\' ) {
                    window.location.href = "http://mywebsite.com";
                }
            },
            error: function(errorThrown){
                console.log(errorThrown);
            }
        });
    };

    setInterval(function(){
        check_user_is_logged_in();
    }, 30000);
})( jQuery );
在上面的代码中,将“mywebsite.com”更改为要将注销用户重定向到的URL。您还可以调整30000. 这是检查之间应该等待的毫秒数。

接下来,在你的主题中functions.php 文件,添加此代码:

function na_check_user_logged_in() {
    // Simply check if the user is logged in or not and echo \'yes\' or \'no\'
    echo ( is_user_logged_in() ) ? \'yes\' : \'no\';
    wp_die();
}

function na_enqueue_scripts(){
    // Enqueue our ajax.js script
    wp_enqueue_script( \'na_ajax_example\', get_stylesheet_directory_uri().\'/ajax.js\', \'jquery\');

    // Reveal the ajax_url for our script     
    wp_localize_script( \'na_ajax_example\', \'ajax_object\', array( \'ajax_url\' => admin_url( \'admin-ajax.php\' ) ) );
};

add_action( \'wp_ajax_is_user_logged_in\', \'na_check_user_logged_in\' );
add_action( \'wp_ajax_nopriv_is_user_logged_in\', \'na_check_user_logged_in\' );
add_action( \'wp_enqueue_scripts\', \'na_enqueue_scripts\' );
现在,此代码将在每个页面上运行。您需要编辑na_enqueue_scripts 函数并添加一些逻辑,使其仅将脚本排入受保护页面的队列。