网站设备检测

时间:2013-03-08 16:46:12

标签: php web-deployment device-detection

我觉得这个问题以前一直在这里得到解答,但我无法在任何地方找到它。

网站可以检测用户正在浏览的设备吗?例如,如果用户正在浏览应用的网站,是否可以知道显示指向 Google Play Apple App Store 的链接,具体取决于他们使用的设备使用

我不认为$HTTP_USER_AGENT就足够了,因为iPad用户可能正在使用Chrome,Android用户可能正在使用Firefox等。

我自然拥有PHP,以及Javascript,自然。

2 个答案:

答案 0 :(得分:1)

检测设备或Web浏览器的唯一方法是用户代理字符串,每个Web浏览器都必须按照HTTP 1.1协议提供用户代理。用户代理字符串可以包含多个产品令牌。按照惯例,产品令牌按其对于识别应用程序的重要性的顺序列出。

对于基于Mozilla的浏览器,用户代理字符串应遵循以下格式:

 MozillaProductToken (MozillaComment) GeckoProductToken *
    (VendorProductToken|VendorComment)

嵌入Gecko布局引擎的应用程序应具有遵循以下格式的用户代理字符串:

 ApplicationProductToken (ApplicationComment) GeckoProductToken *
    (VendorProductToken|VendorComment)

其中:

 ProductToken     :      Mozilla/ MozillaVersion
 Version          :      Major . Minor
 Comment          :      ( Platform; Security; OS-or-CPU;
                                 Localization information; 
                                 GeckoVersion)*[; Optional Other Comments] )
 Platform         :      Windows, Linux, Mac etc.
 Security         :      N for no security; 
                         U for strong security; 
                         I for weak security
 OS-or-CPU        :      Windows Version/MacOS 
 GeckoVersion     :      String starting with "rv:" followed 
                         by the Gecko version
 GeckoProductToken:      Gecko/GeckoDate
 GeckoDate        :      Date in the format YYYYMMDD

实施例

Mozilla发布

     Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101

基于与上述浏览器相同的代码库的品牌版本

     Mozilla/5.001 (Macintosh; N; PPC; ja; rv:1.0) Gecko/25250101 
       MegaCorpBrowser/1.0 (MegaCorp, Inc.)

重新品牌发布

      Mozilla/9.876 (X11; U; Linux 2.2.12-20 i686, en; rv:2.0) Gecko/
        25250101 Netscape/5.432b1 (C-MindSpring)

基于Gecko的浏览器

      TinyBrowser/2.0 (TinyBrowser Comment; rv:1.9.1a2pre) Gecko/20201231

OPERA

用户字符串规范:

  Opera/Version (OS-or-CPU; Encryption; Language)

他们使用WebKit作为其渲染引擎,但使用不同的JavaScript引擎。对于Chrome的初始测试版0.2版,用户代理字符串会携带来自WebKit的所有信息以及Chrome版本的额外部分。格式如下:

  Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) 
  AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Chrome/
  ChromeVersion Safari/SafariVersion

  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, 
  like Gecko) Chrome/0.2.149.29 Safari/525.13

的Konqueror

Konqueror是与KDE Linux桌面环境捆绑在一起的浏览器,它基于KHTML开源渲染引擎。虽然仅在Linux上可用,但Konqueror拥有活跃的用户群。为了获得最佳兼容性,Konqueror选择在IE之后格式化其用户代理字符串,如下所示:

 Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)

的WebKit

2003年,Apple宣布将发布自己的网络浏览器,称为Safari。 Safari渲染引擎名为WebKit,最初是基于Linux的Konqueror Web浏览器中使用的KHTML渲染引擎的分支。但是,您如何确保浏览器不会被锁定在热门网站之外?答案是,将足够的信息放入用户代理字符串中,以说服网站浏览器与其他流行的浏览器兼容。这导致了一个用户代理字符串,格式如下:

 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/
 124 (KHTML, like Gecko) Safari/125.1

移动和平板电脑指标

UA字符串的平台部分表示Firefox是否在手机大小或平板电脑设备上运行。当Firefox在具有手机外形的设备上运行时,有一个移动设备; UA字符串的平台部分中的令牌。例如:

 Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0

 Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0

但是,如果您使用UA嗅探将内容定位到设备外形,请查看Mobi(包括使用“Mobi”的Opera Mobile)作为手机外形,并且不要假设“Android”之间存在任何关联和设备的外形。

的Android

 Phone    :     Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0
 Tablet   :     Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0

Firefox OS

 Phone    :     Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0

答案 1 :(得分:1)

您可以同时使用服务器端和客户端技术来智能猜测哪些设备访问者正在使用:

  • PHP可以解析用户代理或在知道设备的数据库上查找
  • Javascript可以检测浏览器的许多API和功能,为您提供有关设备功能的非常好的图片。

虽然没有真正的保证(你基本上信任浏览器选择告诉你自己),这里有两个关于用户设备的样本: