Php 如何在启用javascript的情况下测试%的用户

Php 如何在启用javascript的情况下测试%的用户,php,javascript,Php,Javascript,如果启用了javascript,尝试测试用户的#。我原以为这个技巧会奏效,但忘了php是以任何一种方式执行的 <script> <?php $sql_insert = "INSERT IGNORE into `test_javascript` (`javascript`,`dateTime`) VALUES ('1',now())"; mysql_query($sql_insert,$link) or die("Insertion Faile

如果启用了javascript,尝试测试用户的#。我原以为这个技巧会奏效,但忘了php是以任何一种方式执行的

<script>
<?php
    $sql_insert = "INSERT IGNORE into `test_javascript` (`javascript`,`dateTime`) VALUES ('1',now())";          
    mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());
?>
</script>
<noscript>
<?php
    $sql_insert = "INSERT IGNORE into `test_javascript` (`javascript`,`dateTime`) VALUES ('0',now())";          
    mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error()); 
?>
</noscript>


您可以使用AJAX,让javascript调用一个单独的页面,该页面将使用PHP处理您的数据库查询。您可以使用js和AJAX调用一个包含插入代码的PHP页面。因此,只有启用了javascript的人员才会进行调用


您可能希望在AJAX帖子中确保将某些内容传递到此PHP页面,以便任何碰巧登录此页面的人(如机器人或其他东西)都不会触发提交到DB。

为访问您的服务器的每个用户生成唯一的ID(例如SessionID)。
使用此ID向计数器注入(如果不是allready计数的话)javascript发送ajax请求。

加载页面时,可以在PHP中向数据库插入一个条目。这将提供页面请求的总数

在Javascript中,可以使用AJAX启动另一个请求。这将发布到PHP脚本,但需要Javascript才能正常工作。此查询将告诉您支持Javascript的浏览器的请求数

如果记录时间戳和IP地址(或任何其他状态变量),则应该能够将两个插入之间的条目关联起来


或者,另一种方法是让AJAX调用更新PHP查询插入的行。在我看来,这将是一种更干净的方法。

记录每个人以计算有多少人访问您的网站(没有脚本或noscript标记),然后使用AJAX调用记录启用javascript的人。

最简单的解决方案可能是将此注入您的页面:

<script>document.cookie = "javascript=1";</script>
document.cookie=“javascript=1”;

然后检查
$\u COOKIE[“javascript”]
。当然,这只适用于第二页/请求。(因此,如果还没有cookie,更详细的探测方法会使用重定向到检测页面。)

下面是一个策略概述:

  • 首先,您需要一种适当可靠的方式来了解“用户”何时查看您的页面
  • 其次,您需要将该id放入cookie中,这样一旦他们拥有cookie,您就可以对其进行测试;将其存储在db表中
  • 现在,在页面加载时,如果cookie可用,请尝试使用JS设置另一个cookie;用用户ID对其进行加密
  • 在页面请求上(或者使用AJAX),测试id的存在并测试cookie;将其存储在一个表中,其中用户id和测试cookie字段都是唯一的
  • 执行查询以查看有多少id没有相应的测试cookie值

  • 您可以像其他人建议的那样使用ajax,也可以只记录每个人的日志并插入添加以下内容的脚本

    document.write('<img src="/javascript-enabled-tracking" width="0" height="0"/>');
    
    document.write(“”);
    
    指向计算支持javascript的人员的php脚本


    此外,您可能可以将图像放入
    noscript
    部分,在这种情况下,您不需要javascript,它将跟踪未启用js的灵魂。

    您应该能够为页面请求分配一个ID,将其作为HTML请求记录到数据库中,然后添加类似的内容

    document.write('<img src="/javascript-enabled-tracking" width="0" height="0"/>');
    

    当服务器端代码在客户端之前执行时,两个PHP块都将运行,因此您的
    脚本
    /
    noscript
    是不相关的

    您可以在第一个页面加载时通过PHP编写cookie,然后使用JS设置另一个cookie。在下一个页面加载中,您可以检查是否已设置了两个cookie,如果仅设置了PHP cookie,则可以假设JS已禁用。当然,如果用户禁用了cookies,那么您将不知道

    或者,您可以使用
    script
    /
    noscript
    加载跟踪像素图像

    <script>
      trackingPixel = new Image();
      trackingPixel.src = '/tracking.php?yesjs';
    </script>
    <noscript>
      <img src="/tracking.php?nojs" alt="">
    </noscript>
    
    
    trackingPixel=新图像();
    trackingPixel.src='/tracking.php?yesjs';
    

    然后让tracking.php文件根据需要记录信息,并在将来的请求中禁用检查。确保在脚本末尾返回适当的内容(MIME类型、内容等)。

    这不是工作原理。/完全是浏览器端的。不过这很有趣。就像《代码》中的Madmartigan。。。这是未来:-)顺便说一句,这里不需要任何noscript标记。没有JS,没有AJAX,没有通过AJAX进行的数据库查询。我想在标签中添加相同类型的跟踪图像也会起作用,因为启用javascript的浏览器不应该调用该图像,但统计每个人可能更安全。我认为最佳的方法是统计每个人,而在
    noscript
    中最酷,除了人们可能使用javascript,但是图像被关闭了。在这种情况下,
    iframe
    应该可以。如果您想要无JS+无图像人员的统计信息,请使用iframe加载图像;-)OP没有要求那么多;-)这种策略可能产生误报的一种方法是,客户机有一个脚本禁用插件。我有一个文件不允许执行,但.js文件仍在下载中。