• Wordpress 记录登录日志


    wordpress 记录登录日志

    
    function get_client_ip() {  
        if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
            $ip = getenv("HTTP_CLIENT_IP");
        } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),  
    "unknown")) {
            $ip = getenv("HTTP_X_FORWARDED_FOR"); 
        } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
            $ip = getenv("REMOTE_ADDR");
        } else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR']  
    && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))  {
            $ip = $_SERVER['REMOTE_ADDR']; 
        } else {
            $ip = "unknown";
        }
        return ($ip);  
    }  
    
    function hanada_user_login_message($user_login)
    {
        global $user_ID;
        date_default_timezone_set(PRC);  // 纠正8小时时差
        $current_user = get_user_by( 'login', $user_login );//获取当前登录信息
        $login_date = date('Y-m-d H:i:s');//获取登录时间
        $login_ip = get_client_ip();//获取登录IP
        $login_addr_arr = json_decode(@file_get_contents('https://freeapi.ipip.net/'.$login_ip),true);//使用接口获得登录IP对应地理位置json数组并解码为php数组
        $login_addr = $login_addr_arr[0].$login_addr_arr[1].$login_addr_arr[2].$login_addr_arr[3].$login_addr_arr[4];//拼接地理位置
        $login_ua = $_SERVER['HTTP_USER_AGENT'];//获取UA
        $login_type = '密码';//标记登录类型为使用密码登录
        //将登录记录写入用户表
        if (empty(get_user_meta($current_user->ID,'login_num', true))) {
            update_user_meta($current_user->ID, 'login_num', 1);
            $login_message_arr = array(
                'login_num_1' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_2' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_3' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_4' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_5' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_6' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_7' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                'login_num_8' => array( 'date' => '', 'ip' => '', 'addr' => '', 'ua' => '', 'type' => '' ),
                );
        } else if (get_user_meta($current_user->ID,'login_num', true) >= 8) {
            update_user_meta($current_user->ID, 'login_num', 1);
            $login_message_arr = get_user_meta($current_user->ID, 'login_message', true);
        }else {
            update_user_meta($current_user->ID, 'login_num', get_user_meta($current_user->ID,'login_num', true) + 1 );
            $login_message_arr = get_user_meta($current_user->ID, 'login_message', true);
        }
        $login_num = get_user_meta($current_user->ID,'login_num', true);
        $login_message_arr['login_num_'.$login_num]['date'] = $login_date;
        $login_message_arr['login_num_'.$login_num]['ip'] = $login_ip;
        $login_message_arr['login_num_'.$login_num]['addr'] = $login_addr;
        $login_message_arr['login_num_'.$login_num]['ua'] = $login_ua;
        $login_message_arr['login_num_'.$login_num]['type'] = $login_type;
        update_user_meta($current_user->ID, 'login_message', $login_message_arr);
    }
    add_action('wp_login','hanada_user_login_message');
    
    function clrs_get_user_agent($useragent)
    {
        $stitle = $sver = null;
        if(preg_match('/iPad/i',$useragent)){
            $stitle = 'iPad';
            if(preg_match('/CPU OS ([.<em>0-9a-zA-Z]+)/i',$useragent,$regmatch)) $sver = 'iOS '.str_replace('</em>','.',$regmatch[1]);
        }elseif(preg_match('/iPod/i',$useragent)){
            $stitle = 'iPod';
            if(preg_match('/iPhone OS ([.<em>0-9a-zA-Z]+)/i',$useragent,$regmatch)) $sver = 'iOS '.str_replace('</em>','.',$regmatch[1]);
        }elseif(preg_match('/iPhone/i',$useragent)&&!preg_match('/Windows Phone/i',$useragent)){
            $stitle = 'iPhone';
            if(preg_match('/iPhone OS ([.<em>0-9a-zA-Z]+)/i',$useragent,$regmatch)) $sver = 'iOS '.str_replace('</em>', '.', $regmatch[1]);
        }elseif(preg_match('/Windows Phone OS 7/i',$useragent)||preg_match('/ZuneWP7/i',$useragent)||preg_match('/WP7/i',$useragent)){
            $stitle = 'Windows Phone';
            $sver = '7';
        }elseif(preg_match('/Windows Phone OS 8.1/i',$useragent)||preg_match('/Windows Phone 8.1/i',$useragent)||preg_match('/WP8.1/i',$useragent)){
            $stitle = 'Windows Phone';
            $sver = '8.1';
        }elseif(preg_match('/Windows Phone OS 8/i',$useragent)||preg_match('/Windows Phone 8/i',$useragent)||preg_match('/WP8/i',$useragent)){
            $stitle = 'Windows Phone';
            $sver = '8';
        }elseif(preg_match('/Windows Phone 10/i',$useragent)||preg_match('/WP10/i',$useragent)){
            $stitle = 'Windows Phone';
            $sver = '10';
        }elseif(preg_match('/wp-windowsphone/i',$useragent)){
            $stitle = 'Windows Phone';
        }elseif(preg_match('/Android/i',$useragent)){
            $stitle = 'Android';
            if(preg_match('/Android[ |/]?([.0-9a-zA-Z]+)/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/[^A-Za-z]Arch/i',$useragent)){
            $stitle = 'Arch Linux';
        }elseif(preg_match('/CentOS/i',$useragent)){
            $stitle = 'CentOS';
            if(preg_match('/.el([.0-9a-zA-Z]+).centos/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Debian/i',$useragent)){
            $stitle = 'Debian GNU/Linux';
        }elseif(preg_match('/Edubuntu/i',$useragent)){
            $stitle = 'Edubuntu';
            if(preg_match('/Edubuntu<a href="[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/FreeBSD/i',$useragent)){
            $stitle = 'FreeBSD';
        }elseif(preg_match('/Kubuntu/i',$useragent)){
            $stitle = 'Kubuntu';
            if(preg_match('/Kubuntu<a href="[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Linux Mint/i',$useragent)){
            $stitle = 'Linux Mint';
            if(preg_match('/Linux Mint/([.0-9a-zA-Z]+)/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Lubuntu/i',$useragent)){
            $stitle = 'Lubuntu';
            if (preg_match('/Lubuntu<a href="[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Mac/i',$useragent)||preg_match('/Darwin/i',$useragent)){
            $stitle = 'Mac';
            if(preg_match('/Mac OS X/i',$useragent)||preg_match('/Mac OSX/i',$useragent)){
                if(preg_match('/Mac OS X/i',$useragent)){
                    $sver = substr($useragent,strpos(strtolower($useragent),strtolower('OS X'))+4);
                }else{
                    $sver = substr($useragent,strpos(strtolower($useragent),strtolower('OSX'))+3);
                }
                $sver = substr($sver,0,strpos($sver,')'));
                if(strpos($sver,';') > -1) $sver = substr($sver,0,strpos($sver,';'));
                $sver = str_replace('<em>','.',$sver);
                if($wpua_show_version==='simple'&&preg_match('/([0-9]+.[0-9]+)/i',$sver,$regmatch)) $sver = $regmatch[1];
                $sver = (empty($sver))?'OS X':"OS X $sver";
            }elseif(preg_match('/Darwin/i',$useragent)){
                $sver = 'OS Darwin';
            }else{
                $stitle = 'Macintosh';
            }
        }elseif(preg_match('/NetBSD/i',$useragent)){
            $stitle = 'NetBSD';
        }elseif(preg_match('/Nova/i',$useragent)){
            $stitle = 'Nova';
            if(preg_match('/Nova<a href="[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/OpenBSD/i',$useragent)){
            $stitle = 'OpenBSD';
        }elseif(preg_match('/Red Hat/i',$useragent)||preg_match('/RedHat/i',$useragent)){
            $stitle = 'Red Hat';
            if(preg_match('/.el([._0-9a-zA-Z]+)/i',$useragent,$regmatch)){
                $stitle .= ' Enterprise Linux';
                $sver = str_replace('</em>','.',$regmatch[1]);
            }
        }elseif(preg_match('/Xubuntu/i',$useragent)){
            $stitle = 'Xubuntu';
            if(preg_match('/Xubuntu<a href="[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Ubuntu/i',$useragent)){
            $stitle = 'Ubuntu';
            if(preg_match('/Ubuntu<a href="[.0-9]+[.0-9a-zA-Z]+">/| </a>/i',$useragent,$regmatch)) $sver = $regmatch[1];
        }elseif(preg_match('/Unix/i',$useragent)){
            $stitle = 'Unix';
        }elseif(preg_match('/Linux/i',$useragent)){
            $stitle = 'Linux';
        }elseif(preg_match('/Windows/i',$useragent)||preg_match('/WinNT/i',$useragent)||preg_match('/Win32/i',$useragent)){
            $stitle = 'Windows';
            if(preg_match('/Windows NT 10.0/i',$useragent)||preg_match('/Windows NT 6.4/i',$useragent)){
                $sver = '10';
            }elseif(preg_match('/Windows NT 6.3/i',$useragent)){
                $sver = '8.1';
            }elseif(preg_match('/Windows NT 6.2/i',$useragent)){
                $sver = '8';
            }elseif(preg_match('/Windows NT 6.1/i',$useragent)){
                $sver = '7';
            }elseif(preg_match('/Windows NT 6.0/i',$useragent)){
                $sver = 'Vista';
            }elseif(preg_match('/Windows NT 5.2 x64/i',$useragent)){
                $sver = 'XP';
            }elseif(preg_match('/Windows NT 5.2/i',$useragent)){
                $sver = 'Server 2003';
            }elseif(preg_match('/Windows NT 5.1/i',$useragent)||preg_match('/Windows XP/i',$useragent)){
                $sver = 'XP';
            }elseif(preg_match('/Windows NT 5.01/i',$useragent)){
                $sver = '2000, Service Pack 1 (SP1)';
            }elseif(preg_match('/Windows NT 5.0/i',$useragent)||preg_match('/Windows NT5/i',$useragent)||preg_match('/Windows 2000/i',$useragent)){
                $sver = '2000';
            }elseif(preg_match('/Windows NT 4.0/i',$useragent)||preg_match('/WinNT4.0/i',$useragent)){
                $sver = 'NT 4.0';
            }elseif (preg_match('/Windows NT 3.51/i',$useragent)||preg_match('/WinNT3.51/i',$useragent)){
                $sver = 'NT 3.11';
            }elseif(preg_match('/Windows NT/i',$useragent)||preg_match('/WinNT/i',$useragent)){
                $sver = 'NT';
            }elseif(preg_match('/Windows 3.11/i',$useragent)||preg_match('/Win3.11/i',$useragent)||preg_match('/Win16/i',$useragent)){
                $sver = '3.11';
            }elseif(preg_match('/Windows 3.1/i',$useragent)){
                $sver = '3.1';
            }elseif(preg_match('/Windows 98; Win 9x 4.90/i',$useragent)||preg_match('/Win 9x 4.90/i',$useragent)||preg_match('/Windows ME/i',$useragent)){
                $sver = 'Millennium Edition (Windows Me)';
            }elseif(preg_match('/Win98/i',$useragent)){
                $sver = '98 SE';
            }elseif(preg_match('/Windows 98/i',$useragent)||preg_match('/Windows 4.10/i',$useragent)){
                $sver = '98';
            }elseif(preg_match('/Windows 95/i',$useragent)||preg_match('/Win95/i',$useragent)){
                $sver = '95';
            }elseif(preg_match('/Windows CE/i',$useragent)){
                $sver = 'CE';
            }elseif(preg_match('/WM5/i',$useragent)){
                $sver = 'Mobile 5';
            }elseif(preg_match('/WindowsMobile/i',$useragent)){
                $sver = 'Mobile';
            }else{
            }
        }
        $btitle = null;
        if(preg_match('/BonEcho/i',$useragent)){
            $btitle = 'BonEcho';
        }elseif(preg_match('/chromeframe/i',$useragent)){
            $btitle = 'Google Chrome Frame';
        }elseif(preg_match('/ChromePlus/i',$useragent)){
            $btitle = 'ChromePlus';
        }elseif(preg_match('/Chromium/i',$useragent)){
            $btitle = 'Chromium';
        }elseif(preg_match('/CrMo/i',$useragent)){
            $btitle = 'Chrome Mobile';
        }elseif(preg_match('/CriOS/i',$useragent)){
            $btitle = 'Chrome';
        }elseif(preg_match('/Galaxy/i',$useragent)&&!preg_match('/Chrome/i',$useragent)){
            $btitle = 'Galaxy';
        }elseif(preg_match('/GoBrowser/i',$useragent)){
            $btitle = 'GO Browser';
        }elseif(preg_match('/Google Wireless Transcoder/i',$useragent)){
            $btitle = 'Google Wireless Transcoder';
        }elseif(preg_match('/GreenBrowser/i',$useragent)){
            $btitle = 'GreenBrowser';
        }elseif(preg_match('/GSA/i',$useragent)&&preg_match('/Mobile/i',$useragent)){
            $btitle = 'Google Search App';
        }elseif(preg_match('/Lorentz/i',$useragent)){
            $btitle = 'Lorentz';
        }elseif(preg_match('/MiniBrowser/i',$useragent)){
            $btitle = 'MiniBrowser';
        }elseif(preg_match('/Minimo/i',$useragent)){
            $btitle = 'Minimo';
        }elseif(preg_match('/MiuiBrowser/i',$useragent)){
            $btitle = 'MIUI Browser';
        }elseif(preg_match('/Mosaic/i',$useragent)){
            $btitle = 'Mosaic';
        }elseif(preg_match('/MozillaDeveloperPreview/i',$useragent)){
            $btitle = 'Mozilla Developer Preview';
        }elseif(preg_match('/MQQBrowser/i',$useragent)||preg_match('/QQBrowser/i',$useragent)){
            $btitle = 'QQbrowser';
        }elseif(preg_match('/MultiZilla/i',$useragent)){
            $btitle = 'MultiZilla';
        }elseif(preg_match('/NokiaBrowser/i',$useragent)){
            $btitle = 'Nokia Browser';
        }elseif(preg_match('/OneBrowser/i',$useragent)){
            $btitle = 'OneBrowser';
        }elseif(preg_match('/Opera Mini/i',$useragent)){
            $btitle = 'Opera Mini';
        }elseif(preg_match('/Opera Mobi/i',$useragent)){
            $btitle = 'Opera Mobile';
        }elseif(preg_match('#Opera.([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'Opera';
            if(preg_match('/Edition ([ .<em>0-9a-zA-Z]+)/i',$useragent,$regmatch)){
                $btitle .= ' '.$regmatch[1];
            }elseif(preg_match('/Opera ([ ._0-9a-zA-Z]+)/i',$useragent,$regmatch)){
                $btitle .= ' '.$regmatch[1];
            }
        }elseif(preg_match('/SeaMonkey/i',$useragent)){
            $btitle = 'SeaMonkey';
        }elseif(preg_match('/Series60/i',$useragent)&&!preg_match('/Symbian/i',$useragent)){
            $btitle = 'Nokia Series60';
        }elseif(preg_match('/S60/i',$useragent)&&!preg_match('/Symbian/i',$useragent)){
            $btitle = 'Nokia S60';
        }elseif(preg_match('#SE 2([a-zA-Z0-9.]+)#i',$useragent,$matches)&&preg_match('/MetaSr/i',$useragent)){
            $btitle = 'Sogou Explorer';
        }elseif(preg_match('/Shiretoko/i',$useragent)){
            $btitle = 'Shiretoko';
        }elseif(preg_match('/SlimBrowser/i',$useragent)){
            $btitle = 'SlimBrowser';
        }elseif(preg_match('#SAMSUNG-(S.H-[a-zA-Z0-9</em>/.]+)#i',$useragent)){
            $btitle = "Samsung";
        }elseif(preg_match('/Songbird/i',$useragent)){
            $btitle = 'Songbird';
        }elseif(preg_match('/TheWorld/i',$useragent)){
            $btitle = 'TheWorld Browser';
        }elseif(preg_match('/Thunderbird/i',$useragent)){
            $btitle = 'Thunderbird';
        }elseif(preg_match('#TencentTraveler ([a-zA-Z0-9.]+)#i',$useragent)){
            $btitle = 'TT Explorer';
        }elseif(preg_match('/uBrowser/i',$useragent)&&!preg_match('/Chrome/i',$useragent)){
            $btitle = 'uBrowser';
        }elseif((preg_match('/Ubuntu; Mobile/i',$useragent)||preg_match('/Ubuntu; Tablet/i',$useragent)&&preg_match('/WebKit/i',$useragent))){
            $btitle = 'Ubuntu Web Browser';
        }elseif(preg_match('#UBrowser([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'UC Browser';
        }elseif(preg_match('#UCBrowser([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'UC Browser';
        }elseif(preg_match('#UC Browser([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'UC Browser';
        }elseif(preg_match('#UCWEB([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'UC Browser';
        }elseif(preg_match('/UltraBrowser/i',$useragent)){
            $btitle = 'UltraBrowser';
        }elseif(preg_match('/UP.Browser/i',$useragent)){
            $btitle = 'Openwave Mobile Browser';
        }elseif(preg_match('/UP.Link/i',$useragent)){
            $btitle = 'Openwave Mobile Browser';
        }elseif(preg_match('/AppleWebkit/i',$useragent,$matches)&&preg_match('/Android/i',$useragent)&&!preg_match('/Chrome/i',$useragent)){
            $btitle = 'Android Webkit';
        }elseif(preg_match('/WebExplorer/i',$useragent)){
            $btitle = 'Web Explorer';
        }elseif(preg_match('/Chrome/i',$useragent)&&preg_match('/Mobile/i',$useragent)&&(preg_match('/Version/i',$useragent)||preg_match('/wv/i',$useragent,$matches))){
            $btitle = 'WebView';
        }elseif(preg_match('/wp-android/i',$useragent)){
            $btitle = 'Wordpress App';
        }elseif(preg_match('/wp-blackberry/i',$useragent)){
            $btitle = 'wp-blackberry';
        }elseif(preg_match('/wp-iphone/i',$useragent)){
            $btitle = 'Wordpress App';
        }elseif(preg_match('/wp-nokia/i',$useragent)){
            $btitle = 'wp-nokia';
        }elseif(preg_match('/wp-webos/i',$useragent)){
            $btitle = 'wp-webos';
        }elseif(preg_match('/wp-windowsphone/i',$useragent)){
            $btitle = 'wp-windowsphone';
        }elseif(preg_match('/YaBrowser/i',$useragent)){
            $btitle = 'Yandex Browser';
        }elseif(preg_match('#Edge/([a-zA-Z0-9.]+)#i',$useragent,$matches)&&preg_match('/Chrome/i',$useragent)&&preg_match('/Safari/i',$useragent)){
            $btitle = 'Microsoft Edge';
        }elseif(preg_match('#Chrome/([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'Google Chrome';
        }elseif(preg_match('/Safari/i',$useragent)&&!preg_match('/Nokia/i',$useragent)){
            $btitle = 'Safari';
        }elseif(preg_match('/Nokia/i',$useragent)){
            $btitle = 'Nokia Web Browser';
        }elseif(preg_match('#(Firefox|Phoenix|Firebird|BonEcho|GranParadiso|Minefield|Iceweasel)/([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = 'Firefox';
        }elseif(preg_match('#360([a-zA-Z0-9.]+)#i',$useragent,$matches)){
            $btitle = '360Safe Explorer';
        }elseif(preg_match('/baidubrowser/i',$useragent)){
            $btitle = 'Baidu Browser';
        }elseif(preg_match('/ Spark/i',$useragent)){
            $btitle = 'Baidu Spark';
        }elseif(preg_match('/MSIE/i',$useragent)||preg_match('/Trident/i',$useragent)){
            $btitle = 'Internet Explorer';
        }
        if(!$stitle){
            $stitle = 'Unknown System';
        }
        if(!$btitle){
            $btitle = 'Unknown Browser';
        }
        return $sver ?  $stitle.' '.$sver.' '.$btitle :  $stitle.' '.$btitle;
    }
    
    function hanade_shotcode_login_message()
    {
        //未登录时返回空值
        if (!is_user_logged_in()) {
            return null;
        }
        //获取登录记录信息
        $current_user = wp_get_current_user();
        $user_meta = get_user_meta($current_user->ID);
        //echo '<pre>';
        //print_r($user_meta);
        $login_num = get_user_meta($current_user->ID,'login_num', true);
        $login_message_arr = get_user_meta($current_user->ID,'login_message', true);
        
        // echo '<pre>';
        // print_r($login_num);
        // print_r($login_message_arr);
        // die;
        //正则替换隐藏IP地址后两位
        $login_ip_reg = '~(d+).(d+).(d+).(d+)~';
        //设置北京时间
        date_default_timezone_set("PRC");
        //获取当前cookie
        $cookie = wp_parse_auth_cookie( '', 'logged_in' );
        //获取当前账号sessions
        $sessions = wp_get_all_sessions();
        //格式化输出登录记录信息
        $login_message_table = '
    <table class="login_message_table"><thead><tr>
                <th>时间</th>
                <th>IP地址</th>
                <th>地理位置</th>
                <th>登录设备</th>
                <th>登录方式</th>
            </tr></thead><tbody class="row-hover">';
        for( $i=$login_num; $i>0; $i-- ) {
            if(!empty($login_message_arr['login_num_'.$i]['date'])) {
                $login_message_table .= '
            <tr>
                <td class="login_message_date">'.$login_message_arr['login_num_'.$i]['date'].'</td>
                <td class="login_message_op">'.preg_replace($login_ip_reg, "$1.$2.*.*", $login_message_arr['login_num_'.$i]['ip']).'</td>
                <td class="login_message_addr">'.$login_message_arr['login_num_'.$i]['addr'].'</td>
                <td class="login_message_ua" title="'.$login_message_arr['login_num_'.$i]['ua'].'">'.clrs_get_user_agent($login_message_arr['login_num_'.$i]['ua']).'</td>
                <td class="login_message_type">'.$login_message_arr['login_num_'.$i]['type'];
                if ( strtotime($login_message_arr['login_num_'.$i]['date']) == $cookie['expiration'] - 1209600 || strtotime($login_message_arr['login_num_'.$i]['date']) == $cookie['expiration'] - 172800) {
                    $login_message_table = $login_message_table.'<span class="current_session">当前登录</span></td></tr>';
                } else {
                    $has_seesion = false;
                    foreach ($sessions as $value) {
                        if( strtotime($login_message_arr['login_num_'.$i]['date']) == $value['login'] ){
                            $login_message_table = $login_message_table.'<span class="other_session">尚未登出</span></td></tr>';
                            $has_seesion = true;
                            break;
                        }
                    }
                    if( $has_seesion == false ) {
                        $login_message_table = $login_message_table.'<span class="loggedout_session">已经登出</span></td></tr>';
                    }
                }
            }
        }
        for( $i=8; $i>$login_num; $i-- ) {
            if(!empty($login_message_arr['login_num_'.$i]['date'])){
                    $login_message_table = $login_message_table.'
            <tr>
                <td class="login_message_date">'.$login_message_arr['login_num_'.$i]['date'].'</td>
                <td class="login_message_ip">'.preg_replace($login_ip_reg, "$1.$2.*.*", $login_message_arr['login_num_'.$i]['ip']).'</td>
                <td class="login_message_addr">'.$login_message_arr['login_num_'.$i]['addr'].'</td>
                <td class="login_message_ua" title="'.$login_message_arr['login_num_'.$i]['ua'].'">'.clrs_get_user_agent($login_message_arr['login_num_'.$i]['ua']).'</td>
                <td class="login_message_type">'.$login_message_arr['login_num_'.$i]['type'];
                if( strtotime($login_message_arr['login_num_'.$i]['date']) === $cookie['expiration'] - 1209600 || strtotime($login_message_arr['login_num_'.$i]['date'] ) == $cookie['expiration'] - 172800){
                    $login_message_table = $login_message_table.'<span class="current_session">当前登录</span></td></tr>';
                }else{
                    $has_seesion = false;
                    foreach($sessions as $value){
                        if( strtotime($login_message_arr['login_num_'.$i]['date']) == $value['login'] ){
                            $login_message_table = $login_message_table.'<span class="other_session">尚未登出</span></td></tr>';
                            $has_seesion = true;
                            break;
                        }
                    }
                    if( $has_seesion == false ) $login_message_table = $login_message_table.'<span class="loggedout_session">已经登出</span></td></tr>';
                }
            }
        }
        $login_message_table = $login_message_table.'</tbody></table>';
        // $login_message_table .= '<p>111</p>';
        return $login_message_table;
    }
    add_shortcode('login_message', 'hanade_shotcode_login_message');
    
    function insert_last_login( $login ) {
    	global $user_id;
    	date_default_timezone_set(PRC);
    	$user = get_userdatabylogin( $login );
    	//current_time( 'mysql' )
    	update_user_meta( $user->ID, 'last_login', date('Y-m-d H:i:s') );
    }
    add_action( 'wp_login', 'insert_last_login' );
    // 添加一个新栏目“上次登录” 
    function add_last_login_column( $columns ) {
    	$columns['last_login'] = '上次登录';
    	return $columns;
    }
    add_filter( 'manage_users_columns', 'add_last_login_column' );
    // 显示登录时间到新增栏目 
    function add_last_login_column_value( $value, $column_name, $user_id ) {
    	$user = get_userdata( $user_id );
    	if ( 'last_login' == $column_name && $user->last_login ) {
            $value = get_user_meta( $user->ID, 'last_login', true);
        } else {
            $value = '从未登录';
        }
    	return $value;
    }
    add_action( 'manage_users_custom_column', 'add_last_login_column_value', 10, 3 );
    
    function jerry_display_dashboard() {
        $service_email = get_service_email();
        $default_service_email = get_option('deafult_service_email');
        $html = '
        <form action="#" method="post" enctype="multipart/form-data" name="op_form" id="op_form">
          <div class="wrap">
            <h2>当前站点选项</h2>
            <table>
               <tbody>
                   <tr>
                       <td>default service email</td>
                   </tr>
                   <tr>
                       <td>
                            <input name="deafult_service_email" value="'.$deafult_service_email.'" id="deafult_service_email" style=" 300px;">
                       </td>
                   </tr>
                   <tr>
                       <td>service email</td>
                   </tr>
                   <tr>
                       <td>
                            <input name="site_service_email" value="'.$service_email.'" id="site_service_email" style=" 300px;">
                       </td>
                   </tr>
               </tbody>
            </table>
            <div class="submit">
                <input type="submit" name="jerry_input_save" calue="save">
            </div>
          </div>
        </form>';
        echo $html;
        
        //未登录时返回空值
        if (!is_user_logged_in()) {
            return null;
        }
        //获取登录记录信息
        $current_user = wp_get_current_user();
        $user_id = $current_user->ID;
        if (1 === $user_id) {
            echo do_shortcode("[login_message]");
        }
    }
    
    function jerry_admin_init() {
        if ( isset($_POST['jerry_input_save']) ) {
            $options = get_option('site_service_email');
            $site_top_host = getTopHost();
            $options[$site_top_host] = trim($_POST['site_service_email']);
            update_option('site_service_email', $options);
    
            $deafult_service_email = trim($_POST['deafult_service_email']);
            update_option('deafult_service_email', $deafult_service_email);
        }
        add_theme_page("登录日志", "登录日志", "edit_themes", basename(__FILE__), 'jerry_display_dashboard');
    }
    add_action('admin_menu', "jerry_admin_init");
    
    正因为来之不易,所以才有了后来的倍加珍惜。
  • 相关阅读:
    [小技巧]虚拟机服务管理小程序
    JNI学习
    Java读取Properties文件的七种方法
    UFLDL教程练习(exercise)答案(1)
    win7让库显示“我的电脑”
    关于asp.net中绑定的模版列CheckBox无法触发OnCheckedChanged事件的问题
    使用OLEDB读取不同版本Excel数据的连接字符串设置
    身为程序员,电脑的时间格式是不能随意设置的
    实现sqlserver数据根据不同时间周期分组
    常用Web Service汇总(天气预报、时刻表等)【转】
  • 原文地址:https://www.cnblogs.com/jjxhp/p/15213310.html
Copyright © 2020-2023  润新知