如何检测用户访问我网站的浏览器(IE,Firefox,Opera)? Javascript,PHP,ASP,Python,JSP以及您能想到的任何其他示例都会有所帮助。是否有与语言无关的方式来获取此信息?

有帮助吗?

解决方案

如果是处理请求,请查看用户 - 传入请求中的代理标头。

更新:如果是报告,请配置您的Web服务器以在访问日志中记录User-Agent,然后运行日志分析工具,例如 AWStats的

更新2:仅供参考,通常 <通常(通常不总是)改变基于用户代理处理请求的方式是个坏主意。

其他提示

您可以查看他们发送的用户代理。请注意,你可以发送你想要的任何代理,这不是100%万无一失,但大多数人不会改变它,除非有特定的理由。

快速而脏的java servlet示例

private String getBrowserName(HttpServletRequest request) {
    // get the user Agent from request header
    String userAgent = request.getHeader(Constants.BROWSER_USER_AGENT);
    String BrowesrName = "";
    //check for Internet Explorer
    if (userAgent.indexOf("MSIE") > -1) {
        BrowesrName = Constants.BROWSER_NAME_IE;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_FIREFOX) > -1) {
        BrowesrName = Constants.BROWSER_NAME_MOZILLA_FIREFOX;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_OPERA) > -1) {
        BrowesrName = Constants.BROWSER_NAME_OPERA;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_SAFARI) > -1) {
        BrowesrName = Constants.BROWSER_NAME_SAFARI;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_NETSCAPE) > -1) {
        BrowesrName = Constants.BROWSER_NAME_NETSCAPE;
    } else {
        BrowesrName = "Undefined Browser";
    }
    //return the browser name
    return BrowesrName;
}

您可以在ASP.NET中使用HttpBrowserCapabilities类。以下是链接的示例

private void Button1_Click(object sender, System.EventArgs e)
{
        HttpBrowserCapabilities bc;
        string s;
        bc = Request.Browser;
        s= "Browser Capabilities" + "\n";
        s += "Type = " + bc.Type + "\n";
        s += "Name = " + bc.Browser + "\n";
        s += "Version = " + bc.Version + "\n";
        s += "Major Version = " + bc.MajorVersion + "\n";
        s += "Minor Version = " + bc.MinorVersion + "\n";
        s += "Platform = " + bc.Platform + "\n";
        s += "Is Beta = " + bc.Beta + "\n";
        s += "Is Crawler = " + bc.Crawler + "\n";
        s += "Is AOL = " + bc.AOL + "\n";
        s += "Is Win16 = " + bc.Win16 + "\n";
        s += "Is Win32 = " + bc.Win32 + "\n";
        s += "Supports Frames = " + bc.Frames + "\n";
        s += "Supports Tables = " + bc.Tables + "\n";
        s += "Supports Cookies = " + bc.Cookies + "\n";
        s += "Supports VB Script = " + bc.VBScript + "\n";
        s += "Supports JavaScript = " + bc.JavaScript + "\n";
        s += "Supports Java Applets = " + bc.JavaApplets + "\n";
        s += "Supports ActiveX Controls = " + bc.ActiveXControls + "\n";
        TextBox1.Text = s;
}

PHP的预定义超全局数组$ _SERVER包含一个键“HTTP_USER_AGENT”,其中包含HTTP请求中发送的User-Agent标头的值。 请记住,这是用户提供的数据,不受信任。很少有用户更改其用户代理字符串,但确实会不时发生。

在客户端,您可以使用navigation.userAgent对象在Javascript中执行此操作。这是一个粗略的例子:

if (navigator.userAgent.indexOf("MSIE") > -1) 
{
    alert("Internet Explorer!");
}
else if (navigator.userAgent.indexOf("Firefox") > -1)
{
    alert("Firefox!");
}

可以在此处找到更详细和全面的示例: http://www.quirksmode.org/js/detect.html

请注意,如果您为了Javascript兼容性而进行浏览器检测,通常最好只使用对象检测或try / catch块,以免您想到的某些版本漏掉了脚本。 例如,而不是这样做......

if(navigator.userAgent.indexOf("MSIE 6") > -1)
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
    objXMLHttp = new XMLHttpRequest();
}

......这样更好:

if(window.XMLHttpRequest) // Works in Firefox, Opera, and Safari, maybe latest IE?
{
    objXMLHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) // If the above fails, try the MSIE 6 method
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

可能取决于您的设置。在linux上使用apache,它写在访问日志/ var / log / apache2 / access_log

您可以通过以下方式执行此操作:
- 查看Web服务器日志,或者
- 在处理之前查看HTML请求中的User-Agent字段(纯文本流)。

首先,我想指出,最好避免修补特定的网络浏览器,除非作为最后的结果 - 使用符合标准的HTML / CSS / JS实现跨浏览器兼容性(是的,javascript确实有一个共同的分母子集,适用于所有主流浏览器)。

据说,HTTP请求标头中的user-agent标签包含客户端(声明的)浏览器。虽然由于人们反对特定的浏览器而不是规范,这已成为一个真正的混乱,所以确定真正的浏览器可能有点棘手。

与此相符:

包含浏览器

Firefox - &gt;火狐

MSIE - &gt; Internet Explorer

Opera - &gt; Opera(少数浏览器之一,不假装是Mozilla :))

大多数代理商包含单词“bot”或“crawler”等。通常是机器人(所以你可以从日志/等中省略它)

查看 browsecap.ini 。链接的站点包含多种脚本语言的文件。 browsecap不仅识别用户代理,还有关于浏览器的CSS支持,JS支持,操作系统(如果是移动浏览器等)的信息。

巡航至此页,查看有关信息的示例browsecap.ini可以告诉您当前的浏览器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top