php如何判斷使用者通過手機wap訪問還是電腦直接存取

來源:互聯網
上載者:User

 

最近做一個手機查詢系統,自然就牽扯到了此問題,那我就根據對wap的認識淺談下通過php判斷使用者訪問方式是通過wap訪問還是電腦直接存取。
首先說最根本的解決方案:
手機訪問時,會附帶發送user-agent資訊,這個資訊裡面會有手機號碼資訊,那麼如果能取得手機號碼,則可以肯定是通過手機wap訪問的。但是目前中國移動已經屏蔽了user-agent資訊,所以擷取不到手機號碼。有關係的朋友可以聯絡移動公司,把wap網站伺服器的ip提交給中國移動,加入白名單後即可取得ua資訊。目前中國聯通可以直接取到手機號,對聯通使用者此方案可完美實施。
接下來說我的解決方案:
手機訪問,原理是手機通過移動公司的Proxy 伺服器進行的訪問。那麼我們就可以理解是一台普通電腦使用了Proxy 伺服器。當手機通過Proxy 伺服器訪問的時候,http頭資訊會毫無疑問的包含一個資訊:via。這個資訊提供了有價值的判斷資訊。
例如河南移動取得的via資訊是:

http/1.1 hazz-b-gw001-wap(infox-wisg, huawei technologies)
河南聯通的via資訊是:

zxwap gateway,zte technologies
其他各省的http頭資訊和這個大同小異,判斷是否手機訪問的方案就出來了:擷取http的via資訊字串看是否包含wap字元,如果有則是通過手機訪問。這樣做的結果是沒有人能偽造手機訪問,判斷絕對準確。自然,這樣對於網上流行的手機wap模擬器也做了屏蔽—-從根本上屏蔽。
作業碼也很簡單:

// check if wap by xhatfunction check_wap() { return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;}

// check over
從我查閱的資料來看,目前此方法應該是迄今互連網上準確率最高、最簡單的判斷手機存取方法。

 

 

以上的方法可以實現判斷訪問來源是手機還是電腦,但有一個問題就是,只能通過手機才能訪問,支援WAP的瀏覽器和手機模擬器也不能訪問,這給測試帶來了麻煩,也有點限制死了。
下面的方案是:
  通過判斷瀏覽器代理標識符,判斷是否是支援WAP的瀏覽器來決定訪問頁面。這有一個缺點就是不可能全部的列出所有手機的瀏覽器標識符與所支援的瀏覽器標識符。
下面看看實現的代碼:

<?phpfunction check_wap() {    if (isset($_SERVER['HTTP_VIA'])) return true;    if (isset($_SERVER['HTTP_X_NOKIA_CONNECTION_MODE'])) return true;    if (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) return true;    if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0) {        // Check whether the browser/gateway says it accepts WML.        $br = "WML";    } else {        $browser = isset($_SERVER['HTTP_USER_AGENT']) ? trim($_SERVER['HTTP_USER_AGENT']) : '';        if(empty($browser)) return true;        $browser=substr($browser,0,4);        if ($browser=="Noki" || // Nokia phones and emulators            $browser=="Eric" || // Ericsson WAP phones and emulators            $browser=="WapI" || // Ericsson WapIDE 2.0            $browser=="MC21" || // Ericsson MC218            $browser=="AUR" || // Ericsson R320            $browser=="R380" || // Ericsson R380            $browser=="UP.B" || // UP.Browser            $browser=="WinW" || // WinWAP browser            $browser=="UPG1" || // UP.SDK 4.0            $browser=="upsi" || // another kind of UP.Browser ??            $browser=="QWAP" || // unknown QWAPPER browser            $browser=="Jigs" || // unknown JigSaw browser            $browser=="Java" || // unknown Java based browser            $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)            $browser=="MITS" || // unknown Mitsubishi browser            $browser=="MOT-" || // unknown browser (UP based?)            $browser=="My S" ||// unknown Ericsson devkit browser ?            $browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de            $browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de            $browser=="ALAV" || // yet another unknown UP based browser ?            $browser=="Wapa" || // another unknown browser (Web based "Wapalyzer"?)            $browser=="Oper") // Opera        {            $br = "WML";        } else {            $br = "HTML";        }    }    if($br == "WML") {        return TRUE;    } else {        return FALSE;    }}if(!check_wap()) {    Header("Location: http://youUrl");    exit();}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.