質問: 一度に1つのipにセッションを制限する プレミアムユーザーアカウントを購読しているサイトでは、一度に1台のコンピュータにログインを制限できるようにしたいです。これを達成するための最も簡単な方法はipで制限することですが、私はこれを達成するためのプラグインを見つけることができませんでした。誰かが私がこの機能を手に入れるのに使えるものを知っていますか?関連: ログインのセキュリティに関する質問 - 複数の場所からログインしている場合、wpに表示されますか。
回答: ユーザーは一度に1台のコンピューターからのみログインできます。ユーザーが30分アクティブでない場合、彼は他のコンピュータからログインできます。別のブラウザで試してください。あなたは2つのステップを踏まなければなりません: あなたのデータベースのtable - wp_usersに2つのカラム(uni_hash、session_time)を作成します。 "alter table` wp_users` add column `uni_hash` varchar(80)not null"; "alter table` wp_users`追加カラム `session_time` int(11)default null ____。]2./function.phpにこのコードを貼り付けます。<?php function mystartsession() { if(!session_id()) { session_start();} } function myendsession() { session_unset(); session_destroy(); } if( !function_exists('single_user_login_uid_create')){ function single_user_login_uid_create($id){ global $wpdb; $get_hash = $wpdb->get_results("select uni_hash from `wp_users` where user_login='".$id."'"); if(isset($_cookie["user_uni_uid".$id.""])){ $user_uni_uid = $_cookie["user_uni_uid".$id.""]; if($get_hash[0]->uni_hash == ''){ $hash_result = $_cookie["user_uni_uid".$id.""];} else{$hash_result = $get_hash[0]->uni_hash; } }else{ $user_uni_uid = 'hash'; if($get_hash[0]->uni_hash != ''){ $hash_result = $get_hash[0]->uni_hash;} else{$hash_result = 'hash'; } } $check_time = $wpdb->get_results("select session_time from `wp_users` where user_login='".$id."'"); if(!is_null($check_time)){$time_result = $check_time[0]->session_time;} else{$time_result = time()-2000;} if( (time() - $time_result < 1800)&&($hash_result != $user_uni_uid) ){ myendsession(); wp_clearcookie(); wp_die('<h1>user is login! </h1>', '', array( 'back_link' => true )); do_action('wp_logout'); nocache_headers(); $redirect_to = home_url(); wp_redirect($redirect_to); exit(); }else{ $_session["last_activity"] = time(); $new_time = $_session["last_activity"]; $randuid = md5(microtime().$_server['remote_add'] ); $sql = "update `wp_users` set `uni_hash`='".$randuid."', `session_time`='".$new_time."' where user_login='".$id."'"; $wpdb->get_results($sql); setcookie("user_uni_uid", $randuid, 9999999999); } } } if( !function_exists('single_user_login_uid_check')){ function single_user_login_uid_check(){ global $wpdb; $id = wp_get_current_user(); $logout_url = wp_logout_url(home_url()); $user_uni_uid = $_cookie["user_uni_uid".$id->user_login.""]; $sql = "select uni_hash from `wp_users` where uni_hash='".$user_uni_uid."'"; $getinfo = $wpdb->get_results($sql); $check_time = $wpdb->get_results("select session_time from `wp_users` where user_login='".$id->user_login."'"); if(!is_null($check_time)){$time_result = $check_time[0]->session_time;} else{$time_result = time()-2000;} if(($getinfo[0]->uni_hash != $user_uni_uid)&&(time() - $time_result < 1800)&&(is_user_logged_in()) ){ wp_clearcookie(); myendsession(); do_action('wp_logout'); nocache_headers(); $redirect_to = home_url(); wp_redirect($redirect_to); exit(); }else{ mystartsession(); if(!isset($_session["last_activity"])){$_session["last_activity"] = time(); } elseif (time() - $_session["last_activity"] > 120) { $_session["last_activity"] = time(); } $new_time = $_session["last_activity"]; $sql = "update `wp_users` set `session_time`='".$new_time."' where user_login='".$id->user_login."'"; $wpdb->get_results($sql); } } } add_action('wp_login', 'mystartsession', 1); add_action('wp_login','single_user_login_uid_create'); add_action('wp_logout', 'myendsession'); add_action('init','single_user_login_uid_check'); ?>