php如何判断用户通过手机wap访问还是电脑直接访问

最近做一个手机查询系统,自然就牵扯到了此问题,那我就根据对wap的认识浅谈下通过php判断用户访问方式是通过wap访问还是电脑直接访问。
首先说最根本的解决方法:
手机访问时,会附带发送user-agent信息,这个信息里面会有手机号码信息,那么如果能取得手机号码,则可以肯定是通过手机wap访问的。但是目前中国移动已经屏蔽了user-agent信息,所以获取不到手机号码。有关系的朋友可以联系移动公司,把wap网站服务器的ip提交给中国移动,加入白名单后即可取得ua信息。目前中国联通可以直接取到手机号,对联通用户此方案可完美实施。
接下来说我的解决方案:
手机访问,原理是手机通过移动公司的代理服务器进行的访问。那么我们就可以理解是一台普通电脑使用了代理服务器。当手机通过代理服务器访问的时候,http头信息会毫无疑问的包含一个信息:via。这个信息提供了有价值的判断信息。
例如河南移动取得的via信息是:

http/1.1 hazz-b-gw001-wap(infox-wisg, huawei technologies)
河南联通的via信息是:

zxwap gateway,zte technologies
其他各省的http头信息和这个大同小异,判断是否手机访问的方案就出来了:获取http的via信息字符串看是否包含wap字符,如果有则是通过手机访问。这样做的结果是没有人能伪造手机访问,判断绝对准确。自然,这样对于网上流行的手机wap模拟器也做了屏蔽—-从根本上屏蔽。
操作代码也很简单:

[php]  view plain copy
  1. // check if wap by xhatfunction   
  2. check_wap() {   
  3.     return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;  
  4. }  


// check over
从我查阅的资料来看,目前此方法应该是迄今互联网上准确率最高、最简单的判断手机访问方法。

 

 

以上的方法可以实现判断访问来源是手机还是电脑,但有一个问题就是,只能通过手机才能访问,支持WAP的浏览器和手机模拟器也不能访问,这给测试带来了麻烦,也有点限制死了。
下面的方案是:
  通过判断浏览器代理标识符,判断是否是支持WAP的浏览器来决定访问页面。这有一个缺点就是不可能全部的列出所有手机的浏览器标识符与所支持的浏览器标识符。
下面看看实现的代码:

[php]  view plain copy
  1. <?php  
  2. function check_wap() {  
  3.     if (isset($_SERVER['HTTP_VIA'])) return true;  
  4.     if (isset($_SERVER['HTTP_X_NOKIA_CONNECTION_MODE'])) return true;  
  5.     if (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) return true;  
  6.     if (strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0) {  
  7.         // Check whether the browser/gateway says it accepts WML.  
  8.         $br = "WML";  
  9.     } else {  
  10.         $browser = isset($_SERVER['HTTP_USER_AGENT']) ? trim($_SERVER['HTTP_USER_AGENT']) : '';  
  11.         if(emptyempty($browser)) return true;  
  12.         $browser=substr($browser,0,4);  
  13.         if ($browser=="Noki" || // Nokia phones and emulators  
  14.             $browser=="Eric" || // Ericsson WAP phones and emulators  
  15.             $browser=="WapI" || // Ericsson WapIDE 2.0  
  16.             $browser=="MC21" || // Ericsson MC218  
  17.             $browser=="AUR" || // Ericsson R320  
  18.             $browser=="R380" || // Ericsson R380  
  19.             $browser=="UP.B" || // UP.Browser  
  20.             $browser=="WinW" || // WinWAP browser  
  21.             $browser=="UPG1" || // UP.SDK 4.0  
  22.             $browser=="upsi" || // another kind of UP.Browser ??  
  23.             $browser=="QWAP" || // unknown QWAPPER browser  
  24.             $browser=="Jigs" || // unknown JigSaw browser  
  25.             $browser=="Java" || // unknown Java based browser  
  26.             $browser=="Alca" || // unknown Alcatel-BE3 browser (UP based?)  
  27.             $browser=="MITS" || // unknown Mitsubishi browser  
  28.             $browser=="MOT-" || // unknown browser (UP based?)  
  29.             $browser=="My S" ||// unknown Ericsson devkit browser ?  
  30.             $browser=="WAPJ" || // Virtual WAPJAG www.wapjag.de  
  31.             $browser=="fetc" || // fetchpage.cgi Perl script from www.wapcab.de  
  32.             $browser=="ALAV" || // yet another unknown UP based browser ?  
  33.             $browser=="Wapa" || // another unknown browser (Web based "Wapalyzer"?)  
  34.             $browser=="Oper"// Opera  
  35.         {  
  36.             $br = "WML";  
  37.         } else {  
  38.             $br = "HTML";  
  39.         }  
  40.     }  
  41.     if($br == "WML") {  
  42.         return TRUE;  
  43.     } else {  
  44.         return FALSE;  
  45.     }  
  46. }  
  47. if(!check_wap()) {  
  48.     Header("Location: http://youUrl");  
  49.     exit();  
  50. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值