博华网络科技,点击查看详情

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

关于 WordPress 禁止多个人同时登录一个用户账号,今天推荐的 Wp Single Login 可以实现这样的功能,不过 Wp Single Login 是通过 WP 3.6 新增的 Heartbeat API? 来实现的。

后台插件安装界面搜索 Wp Single Login 即可在线安装,或者在这里下载 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.         function __construct() {
  16.             if ( ! session_id() )
  17.                 session_start();
  18.             $this->session_id = session_id();
  19.             add_action( ‘init’, array$this, ‘wpsl_init’ ) );
  20.             add_action( ‘wp_login’, array$this, ‘wpsl_login’ ), 10, 2 );
  21.       add_filter(‘heartbeat_received’, array$this, ‘wpsl_heartbeat_received’ ), 10, 2);
  22.             add_filter(‘heartbeat_nopriv_received’, array$this, ‘wpsl_heartbeat_received’ ), 10, 2);
  23.             add_filter( ‘login_message’, array$this, ‘wpsl_loggedout_msg’ ), 10 );
  24.         }
  25.         function wpsl_init() {
  26.             if( ! is_user_logged_in() )
  27.                 return;
  28.       //enqueue the Heartbeat API
  29.       wp_enqueue_script(‘heartbeat’);
  30.       wp_enqueue_script(‘jquery’);
  31.       //load our Javascript in the footer
  32.       add_action(“wp_footer”array$this, ‘wpsl_scripts’ ) );
  33.             $user_sess_id = get_user_meta( get_current_user_id(), ‘_wpsl_hash’, true );
  34.             if$user_sess_id != $this->session_id ) {
  35.                 wp_logout();
  36.                 wp_redirect( site_url( ‘wp-login.php?wpsl=loggedout’ ) );
  37.                 exit;
  38.             }
  39.         }
  40.         function wpsl_login( $user_login$user ) {
  41.             update_user_meta( $user->ID, ‘_wpsl_hash’, $this->session_id );
  42.             return;
  43.         }
  44.         function wpsl_loggedout_msg() {
  45.                 if ( isset($_GET[‘wpsl’]) && $_GET[‘wpsl’] == ‘loggedout’ ) {
  46.                         $msg = __( “Your session has been terminated as you are logged in from another browser.” ) ;
  47.                         $message = ‘<p class=“message”>’.$msg.'</p><br />’;
  48.                         return $message;
  49.                 }
  50.         }
  51. function wpsl_heartbeat_received($response$data) {
  52.   $user_sess_id = get_user_meta( get_current_user_id(), ‘_wpsl_hash’, true );
  53.     if$data[‘user_hash’] && $data[‘user_hash’] != $user_sess_id ){
  54.         $response[‘wpsl_response’] = 1;
  55.     wp_logout();
  56.     }
  57.   else
  58.     $response[‘wpsl_response’] = 0;
  59.     return $response;
  60. }
  61. function wpsl_scripts() { ?>
  62. <script>
  63.   jQuery(document).ready(function() {
  64.         wp.heartbeat.interval( ‘fast’ );
  65.         //hook into heartbeat-send: and send the current session id to the server
  66.         jQuery(document).on(‘heartbeat-send’, function(e, data) {
  67.             data[‘user_hash’] = ‘<?php echo $this->session_id; ?>’; //need some data to kick off AJAX call
  68.         });
  69.         //hook into heartbeat-tick: client looks for a ‘server’ var in the data array and logs it to console
  70.         jQuery(document).on( ‘heartbeat-tick’, function( e, data ) {
  71.             if( data[‘wpsl_response’] ){
  72.         alert( ‘<?php _e(‘Your session has been terminated as you are logged in from another browser.’); ?>’ );
  73.                 window.location.href=’https://www.xhsay.com/<?php%C2%A0echo site_url( ‘wp-login.php?wpsl=loggedout’ ); ?> ‘;
  74.             }
  75.         });
  76.     });
  77. </script>
  78. <?php
  79. }
  80.     }
  81.     new wp_single_login();
  82. }

人已赞赏
wordpress教程

WordPress教程:使用 PDF Embedder 直接嵌入显示PDF文件

2020-5-26 12:40:49

wordpress教程

WordPress教程:自定义文章排序

2020-5-26 12:40:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索