A-A+

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

2015年08月22日 PHP开源系统 评论 1 条 阅读 130 views 次

许多 wordpress 都是开放注册的,又有不少的站点是在做交易站点,可以进行购买实物在线交易的,在线交易的站点往往是禁止同一个帐号多人使用的,而在 wordpress 中是没有限制的,也就是说一个帐号可以进行共享,然后多人同时重复登录的,这给交易带来了困难,当然这里说的情况是稍大一点的网站,如果像夏日博客这样流量不大的站点就没有必要了,下面夏日博客就来教大家如何禁止同一个注册帐号同时重复登录的问题。

其实也很简单,只是一段代码的事儿,把如下的代码丢到主题下 functions.php 文件中即可,如下:

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

随着 wordpress 版本的更新,本段代码可能会失效,哪么我们就可以去下载插件 Prevent Concurrent Logins 来达到同样的目的,如果还想继续使用代码,哪就把 Prevent Concurrent Logins插件里面的代码摘出来,更新一下 functions.php 文件里面的代码就可以了。

标签:

1 条留言  访客:1 条  博主:0 条

  1. 姜辰

    哦,原来WP世界水很深啊。

给我留言