您好!欢迎来到模板下载吧!本站资源24小时自动发货,请放心选购,一次付费,终身下载,售后请提交工单!

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

开拓者 2018-06-25 WP技术 1883 已收录 本文共4998个字,预计阅读需要13分钟。
  • 文章介绍
  • 快速入门
  • 增值服务

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

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

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

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

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

Prevent Concurrent Logins提取:

  1. function pcl_user_has_concurrent_sessions() {
  2.     return ( is_user_logged_in() && count( wp_get_all_sessions() ) > 1 );
  3. }
  4. /**
  5.  * Get the user's current session array
  6.  *
  7.  * @return array
  8.  */
  9. function pcl_get_current_session() {
  10.     $sessions = WP_Session_Tokens::get_instance( get_current_user_id() );
  11.     return $sessions->get( wp_get_session_token() );
  12. }
  13. /**
  14.  * Only allow one session per user
  15.  *
  16.  * If the current user's session has been taken over by a newer
  17.  * session then we will destroy their session automattically and
  18.  * they will have to login again to continue.
  19.  *
  20.  * @action init
  21.  *
  22.  * @return void
  23.  */
  24. function pcl_disallow_account_sharing() {
  25.     if ( ! pcl_user_has_concurrent_sessions() ) {
  26.         return;
  27.     }
  28.     $newest  = max( wp_list_pluck( wp_get_all_sessions(), 'login' ) );
  29.     $session = pcl_get_current_session();
  30.     if ( $session['login'] === $newest ) {
  31.         wp_destroy_other_sessions();
  32.     } else {
  33.         wp_destroy_current_session();
  34.     }
  35. }
  36. add_action( 'init', 'pcl_disallow_account_sharing' );

Wp Single Login提取:

  1. <?php  
  2. /* 
  3. Plugin name: WP Single Login 
  4. Plugin URI: http://magnigenie.com/wp-single-login/ 
  5. 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. 
  6. Version: 1.0 
  7. Author: Nirmal Ram 
  8. Author URI: http://magnigenie.com/about-me/ 
  9. License: GPLv2 or later 
  10. License URI: http://www.gnu.org/licenses/gpl-2.0.html 
  11. */  
  12. if( !class_exists( 'wp_single_login' ) ) {  
  13.     class wp_single_login {  
  14.         private $session_id;   
  15.    
  16.         function __construct() {  
  17.             if ( ! session_id() )  
  18.                 session_start();  
  19.    
  20.             $this->session_id = session_id();  
  21.    
  22.             add_action( 'init', array$this, 'wpsl_init' ) );  
  23.             add_action( 'wp_login', array$this, 'wpsl_login' ), 10, 2 );  
  24.       add_filter('heartbeat_received', array$this, 'wpsl_heartbeat_received' ), 10, 2);  
  25.             add_filter('heartbeat_nopriv_received', array$this, 'wpsl_heartbeat_received' ), 10, 2);  
  26.             add_filter( 'login_message', array$this, 'wpsl_loggedout_msg' ), 10 );  
  27.         }  
  28.    
  29.         function wpsl_init() {  
  30.             if( ! is_user_logged_in() )  
  31.                 return;  
  32.       //enqueue the Heartbeat API  
  33.       wp_enqueue_script('heartbeat');  
  34.       wp_enqueue_script('jquery');  
  35.    
  36.       //load our Javascript in the footer  
  37.       add_action("wp_footer"array$this, 'wpsl_scripts' ) );  
  38.             $user_sess_id = get_user_meta( get_current_user_id(), '_wpsl_hash', true );  
  39.    
  40.             if$user_sess_id != $this->session_id ) {  
  41.                 wp_logout();   
  42.                 wp_redirect( site_url( 'wp-login.php?wpsl=loggedout' ) );  
  43.                 exit;  
  44.             }  
  45.         }  
  46.         function wpsl_login( $user_login$user ) {  
  47.             update_user_meta( $user->ID, '_wpsl_hash', $this->session_id );  
  48.             return;  
  49.         }  
  50.         function wpsl_loggedout_msg() {  
  51.                 if ( isset($_GET['wpsl']) && $_GET['wpsl'] == 'loggedout' ) {  
  52.                         $msg = __( "Your session has been terminated as you are logged in from another browser." ) ;  
  53.                         $message = '<p class="message">'.$msg.'</p><br />';  
  54.                         return $message;  
  55.                 }  
  56.         }  
  57. function wpsl_heartbeat_received($response$data) {  
  58.   $user_sess_id = get_user_meta( get_current_user_id(), '_wpsl_hash', true );  
  59.     if$data['user_hash'] && $data['user_hash'] != $user_sess_id ){  
  60.         $response['wpsl_response'] = 1;  
  61.     wp_logout();  
  62.     }  
  63.   else  
  64.     $response['wpsl_response'] = 0;  
  65.    
  66.     return $response;  
  67. }  
  68.    
  69. function wpsl_scripts() { ?>  
  70. <script>  
  71.   jQuery(document).ready(function() {  
  72.         wp.heartbeat.interval( 'fast' );  
  73.         //hook into heartbeat-send: and send the current session id to the server  
  74.         jQuery(document).on('heartbeat-send', function(e, data) {  
  75.             data['user_hash'] = '<?php echo $this->session_id; ?>'; //need some data to kick off AJAX call  
  76.         });  
  77.    
  78.         //hook into heartbeat-tick: client looks for a 'server' var in the data array and logs it to console  
  79.         jQuery(document).on( 'heartbeat-tick', function( e, data ) {              
  80.             if( data['wpsl_response'] ){  
  81.         alert( '<?php _e('Your session has been terminated as you are logged in from another browser.'); ?>' );  
  82.                 window.location.href='<?php echo site_url( 'wp-login.php?wpsl=loggedout' ); ?> ';  
  83.             }  
  84.         });  
  85.     });       
  86. </script>  
  87. <?php  
  88. }  
  89.     }  
  90.     new wp_single_login();  
  91. }  
温馨提示:本文最后更新于2019年3月19日,已超过 2 年没有更新,如果文章内容或图片资源失效,请留言反馈,模板下载吧会及时处理,谢谢!

上一篇:

下一篇:

WordPress 禁止多人同时登录一个用户账号(代码版):等您坐沙发呢!
大牛,别默默的看了,快来点评一下吧!:)。

您必须登录后才能发表评论哦!:)

站内登录 QQ登录 微博登录
wordpress自适应高级图片shejigh主题

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系作者

模板下载吧,累计帮助1000+用户成功建站,为草根创业提供助力!

立刻开启你的建站之旅
现在加入模板下载吧,注册一个账号
  • 模板下载吧拥有海量网站模板及源码,站长亲测干净无后门。

  • 注册即能下载免费模板栏目资源,帮您更快的完成网站建设。

  • 每日更新模板资源,每日精品推荐,及时获取最新模板资源流行去向。

  • 完美的售后服务,帮助草根站长、企业等成功建站。

  • 将您最爱的资源收藏,建立自己的资源库,并与朋友分享。