WordPress 禁止多人同时登录一个用户账号(代码版)

在WordPress的用户管理问题中发现WordPress有一个很头疼的问题,那就是,WordPress居然可以多个人同事登陆一个账号,不知道目前的4.8版本是否还允许,这里也不在测试,直接分享一段代码,实现:WordPress 禁止多人同时登录一个用户账号。

更多精彩内容请看 lisa小站
www.lisashopmall.com 可按Ctrl + D 进行收藏

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

这里推荐的功能插件为:Prevent Concurrent Logins和Wp Single Login点击即可直接下载。

如果你不想用插件,这里是代码版,添加到function.php即可:

以下分别为两个插件提取的代码版!

Prevent Concurrent Logins提取

function pcl_user_has_concurrent_sessions() {  
return ( is_user_logged_in() && count( wp_get_all_sessions() ) > 1 ); } 
/**  * Get the user's current session array  *  * @return array  */ 
function pcl_get_current_session() {  
$sessions = WP_Session_Tokens::get_instance( get_current_user_id() );
return $sessions->get( wp_get_session_token() ); } 
/**  * Only allow one session per user  *  * 
If the current user's session has been taken over by a newer  
* session then we will destroy their session automattically and  
* they will have to login again to continue.  *  * 
@action init  *  * @return void  */ 
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' );

Wp Single Login提取

<?php /* Plugin name: WP Single Login Plugin URI: 
http://magnigenie.com/wp-single-login/ Description: 
This plugin will automatically logout the already logged in user when a user 
with the same login details tries to login from different browser or different 
computer. This plugin needs zero configuration to run. Just install it if you 
want single login functionality on your site. 
Version: 1.0 Author: Nirmal Ram Author 
URI: http://magnigenie.com/about-me/ License: GPLv2 or later License 
URI: http://www.gnu.org/licenses/gpl-2.0.html */ 
if( !class_exists( 'wp_single_login' ) ) {    
class wp_single_login {   private $session_id; 
function __construct() {    
if ( ! session_id() )        
session_start(); 
$this->session_id = session_id();
add_action( 'init', array( $this, 'wpsl_init' ) );    
add_action( 'wp_login', array( $this, 'wpsl_login' ), 10, 2 );       
add_filter('heartbeat_received', array( $this, 'wpsl_heartbeat_received' ), 
10, 2);    
add_filter('heartbeat_nopriv_received', array( $this, 'wpsl_heartbeat_received'), 
10, 2);    add_filter( 'login_message', array( $this, 'wpsl_loggedout_msg' ), 
10 );   }
function wpsl_init() {    
if( ! is_user_logged_in() )    
return;       
//enqueue the Heartbeat API       
wp_enqueue_script('heartbeat');       
wp_enqueue_script('jquery'); 
//load our Javascript in the footer       
add_action("wp_footer", array( $this, 'wpsl_scripts' ) );   
$user_sess_id = get_user_meta( get_current_user_id(), '_wpsl_hash', true );
if( $user_sess_id != $this->session_id ) {     
wp_logout();      
wp_redirect( site_url( 'wp-login.php?wpsl=loggedout' ) );     
exit;    }   }   
function wpsl_login( $user_login, $user ) {    
update_user_meta( $user->ID, '_wpsl_hash', $this->session_id );    
return;   }   
function wpsl_loggedout_msg() {     
if ( isset($_GET['wpsl']) && $_GET['wpsl'] == 'loggedout' ) {       
$msg = __( "Your session has been terminated as you are logged in from another 
browser." ) ;       
$message = '<p class="message">'.$msg.'</p><br />';       
return $message;     }   } 
function wpsl_heartbeat_received($response, $data) {   
$user_sess_id = get_user_meta( get_current_user_id(), '_wpsl_hash', true );  
if( $data['user_hash'] && $data['user_hash'] != $user_sess_id ){   
$response['wpsl_response'] = 1;     
wp_logout();  }   else     
$response['wpsl_response'] = 0; 
return $response; } 
function wpsl_scripts() { ?> <script>   jQuery(document).ready(function() {   
wp.heartbeat.interval( 'fast' );   
//hook into heartbeat-send: and send the current session id to the server   
jQuery(document).on('heartbeat-send', function(e, data) {    
data['user_hash'] = '<?php echo $this->session_id; ?>'; 
//need some data to kick off AJAX call   }); 
//hook into heartbeat-tick: client looks for a 'server' var in the data array 
and logs it to console   jQuery(document).on( 'heartbeat-tick', 
function( e, data ) {       
if( data['wpsl_response'] ){         
alert( '<?php _e('Your session has been terminated as you are logged in from 
another browser.'); ?>' );     
window.location.href='<?php echo site_url( 'wp-login.php?wpsl=loggedout' ); ?> ';    
}   });  });   </script> 
<?php }  }  
new wp_single_login(); }

 

【注:本文源自网络文章资源,由站长整理发布】

0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到