【问题标题】:How to detect if the browser requests a certain file from the server如何检测浏览器是否从服务器请求某个文件
【发布时间】:2012-09-24 09:13:18
【问题描述】:

我能否检测到网络浏览器是否正在从服务器请求某个图像? 我想检查用户是否下载了图像,或者它是否已经从浏览器缓存。

主要思想:

我正在计算每个个人资料页面的唯一身份访问者。我现在使用IPsCookies,但也想添加这个。 IP 可以轻松更改,Cookie 可以被阻止/删除。 我的想法是像flash cookie 一样使用这些信息。图像的大小为1px x 1px,并且对用户不可见。我根本没有使用 ActionScript 和 Flash 的经验,所以我不能使用 flash cookie 并想尝试一下。

编辑: 正如我从斯文的回答中了解到的那样,也许我无法解释我需要什么。我的问题和斯文的回答一样。 如何 wait for the request to appear on the server?我希望浏览器缓存图像,因此只有当用户是唯一访问者时才会下载它,即他是第一次查看该页面。

我想获取此信息并检查图像是否被请求(即它被缓存)。类似的东西:

$requested_files = $_SERVER['REQUESTS']; // Or something similar, this is the question.
$file_name = $profile_page_owner_id.'.png'; // For example.

if(in_array($file_name, $requested_files)) {
    // File is requested, so it is not cached. This is an unique visitor.
    // Of course except this I will continue to check IP and Cookie.
    // This will be the 3rd check.
} else {
    // File is not requested, so it is already cached.
    // Page is viewed before, this is not an unique visitor.
}

【问题讨论】:

  • 这是个坏主意。人们不能拥有 flash、默认阻止 flash 或删除他们的 flash cookie,因此您不会更安全。浏览器的 IP + 用户代理是最安全的方法之一。想一想,如果用户更改了他们的 IP(仅供参考,这并不容易),那么这是否真的很重要?
  • Flash cookie 当然可以删除。但与 HTTP cookie 相比,这种情况很少发生。正如我所说,我不能使用 Flash cookie,因为我根本没有足够的关于 Flash 和 ActionScript 的知识。谷歌搜索了一些PHP Flash cookie tutorials,但找不到有用的东西。唯一身份访问非常重要,因为我们希望向他们的个人资料页面的唯一访问次数最多的用户支付奖金,因此这不仅仅是一个信息性统计数据。最后,您能否为我提供一些 IP+User Agent 的示例,因为我无法找到如何在这种情况下有效地使用 User Agent。

标签: php webserver


【解决方案1】:

您只需等待请求出现在服务器上即可检测到它。

如果你得到一个请求,浏览器没有缓存它。

如果您不希望浏览器缓存它,只需在 http 标头中说明即可。然后你每次都会收到请求。

编辑:好的,如果您想要缓存图像,只需发送允许在浏览器中无限期缓存的缓存标头。通常图像只会被请求一次。对请求的检测保持不变。

【讨论】:

  • 我编辑了我的问题,你可以再看一遍。这正是我需要的。该怎么做?
【解决方案2】:

只需创建一个将输出图像的 PHP 文件,在输出之前添加您需要的逻辑(计数和东西),在 html 图像中调用 php 文件并通过发送 @987654322 之类的标头强制缓存图像@

您可以查看这篇文章:How to get the browser to cache images, with php?,了解有关缓存的更多信息。

【讨论】:

  • 好的,例如我正在使用<img src="showImage.php?id=12345">,并且在 php 文件中我得到了 ID 并回显了文件名:12345.png。但是我如何检测这张图片是被缓存了还是第一次从客户端的浏览器请求呢?
  • 如果您发送正确的标题 - 浏览器将只请求一次图像 - 所以每个请求都是唯一的。您可以使用 Google Chrome 中的开发人员工具检查此逻辑(F12 -> 网络 -> 刷新您的页面并查看它是否从缓存中加载)。
  • 是的,我明白这一点。但是如何检查服务器端是否下载或缓存了图像?我应该每次都读取浏览器缓存吗?从 Chrome 手动检查是可以的,但我应该通过 PHP 做同样的事情。
  • 你不能——你必须依赖浏览器的缓存能力。没有办法区分第一次下载项目的新用户和缓存过期(或删除)的老用户。尝试将此方法与 IP 和/或 cookie 支持相结合,以达到最佳效果。
  • 我已经在使用 IP 和 Cookie。这将是我的第三个辅助步骤。每次访问将持续 24 小时。因此,同一用户将在 1 天(24 小时)后再次成为唯一访问者。缓存过期时间不是很重要。我认为在大多数情况下不会少于 24 小时。而且如果缓存被删除了,嗯,cookies也可以被删除,IP可以被更改......我知道在没有授权的情况下我无法100%成功跟踪唯一访问者。
【解决方案3】:

将您的图像路径设置为,例如user_track.php,浏览器将请求该文件,您在其中进行日志记录,然后发送适当的标头和图像本身。

您甚至可以发送拒绝缓存标头,以便默认情况下不会缓存图像。

【讨论】:

  • 对不起,我听不懂你的意思。请给我一些例子好吗?我也不想拒绝缓存。如果图片被缓存了,我会解释为“他之前浏览过这个页面,所以它不是一个唯一的视图”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-12
相关资源
最近更新 更多