next up previous contents
Next: 限制用戶更動國別 Up: 自動設定用戶國別 Previous: iplookup 程式修改   Contents

國別自動設定

  1. 修改 moodle 函式,讓系統在用戶登入後,以用戶登入的來源 IP,更新用戶的國別,但因訪客身分 (id=1),無權取得 ../iploopup/lib.php,會造成訪客自動登入後,執行這行無法繼續,故網頁空白,重新整理時已不再更新登入紀錄,所以網頁恢復正常。moodle 可以設定不記錄訪客訪問來避免此問題,但目前系統設定維持訪客訪問記錄,故排除訪客登入 ip 的國別記錄。當用戶首次登入時,由於系統中並沒有上次登入的 ip 訊息,查詢 ip 位置函式 iplookup_find_location,因找不到對應位置而出現以下錯誤訊息,也要一併處理,也就是當上次登入 ip 是 null,就直接設定國別代碼為 'TW'。
    異常-Invalid IP address: ''
    
  2. 以上次登入 ip 設定國別程式。
    [root@dywang html]# diff -urN -wbBE moodle/lib/moodlelib.php moodle23/lib/moodlelib.php
    --- moodle/lib/moodlelib.php	2012-08-10 08:05:01.000000000 +0800
    +++ moodle23/lib/moodlelib.php	2014-11-04 10:01:15.231909874 +0800
    @@ -3287,6 +3287,15 @@
         $USER->lastlogin = $user->lastlogin = $USER->currentlogin;
         $USER->currentlogin = $user->lastaccess = $user->currentlogin = time();
     
    +	if ( $USER->id != 1 ) {
    +		require_once('../iplookup/lib.php'); //dywang
    +		if(is_null($USER->lastip)) { 
    +			$user->country = 'TW';
    +		} else {	
    +			$info = iplookup_find_location($USER->lastip);
    +			$user->country = $info[countrycode];
    +		}
    +	}
         $user->id = $USER->id;
     
         $DB->update_record('user', $user);
    
  3. 代理伺服器設定登入IP位址來源的記錄:若 moodle 伺服器是位於反向代理伺服器之後,或用戶使用 proxy 登入 moodle ,moodle 可以選擇要記錄那一個 HTTP 表頭可以信任,以包含遠端 IP 位址。getremoteaddrconf 預設依據 HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR 順序找尋存在的 IP 記錄,共有以下四種設定選擇,若要直接記錄 proxy ip 可設定只搜尋 REMOTE ADDR
    1. HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, REMOTE_ADDR
    2. HTTP_X_FORWARDED_FOR, REMOTE_ADDR
    3. HTTP_CLIENT, REMOTE_ADDR
    4. REMOTE_ADDR



2017-08-04