Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我如何衡量我的页面现在有多少访问者?_Php_Asp.net_Ruby_Apache - Fatal编程技术网

Php 我如何衡量我的页面现在有多少访问者?

Php 我如何衡量我的页面现在有多少访问者?,php,asp.net,ruby,apache,Php,Asp.net,Ruby,Apache,对于我正在编写的web应用程序来说,以频繁的间隔(每分钟左右)测量当前我的应用程序的特定部分中有多少访问者将是关键。假设我的应用程序有10个子部分,它们在使用JavaScript和使用#持久化之间切换/第8页样式散列锚定。准确做到这一点的最佳方法是什么 我目前的计划是将金额保存在数据库中,每次用户单击页面或离开页面时进行加减。但这对我来说并不是一个很好的解决方案。跟踪页面离开的事件可能会因为关闭浏览器而取消,人们可能会通过运行访问/离开等API调用来篡改数据。要获得可靠的页面离开,需要做大量的工

对于我正在编写的web应用程序来说,以频繁的间隔(每分钟左右)测量当前我的应用程序的特定部分中有多少访问者将是关键。假设我的应用程序有10个子部分,它们在使用JavaScript和使用
#持久化之间切换/第8页
样式散列锚定。准确做到这一点的最佳方法是什么

我目前的计划是将金额保存在数据库中,每次用户单击页面或离开页面时进行加减。但这对我来说并不是一个很好的解决方案。跟踪页面离开的事件可能会因为关闭浏览器而取消,人们可能会通过运行访问/离开等API调用来篡改数据。要获得可靠的页面离开,需要做大量的工作

编辑:要指定,我的应用程序将没有用户帐户。此外,我不只是试图记录我的网页有多少访问者。我正试图准确地知道现在我的页面上有多少访问者。这意味着我需要一些可靠的方法来了解访问者是否不再在我的页面上。这就是问题所在。我刚刚有了一个好主意,我可以让他们页面上的JavaScript每隔10秒左右通知我的服务器,让他们仍然在那里,如果他们不在,就让他们的访问超时并删除。这样行吗?如果我让成千上万的人同时使用我的应用程序,这难道不是我小小的服务器的问题吗

有什么想法吗



我用很多常见的web开发标签来标记这一点,因为这是一个非常开放的问题,这些标签中的任何一个都可能包含答案。

我自己没有尝试过,但是你可以使用一些工具,比如

一种不同的方法就是简单地记录每个请求的用户、日期/时间和页面

然后,在指定的时间间隔运行一个查询,该查询汇总显示页面和用户计数的数据。将这些结果存储在单独的表中

通过这种方式,您可以轻松地绘制访客历史记录,并对“当前”访客的数量给出最新的响应

数据汇总后,显然可以从日志表中删除数据

另一个优点是页面请求不会为每个请求锁定表。而递增/递减计数器则会。根据交通水平,计数器进近将对性能产生负面影响


通过使用日志,您可以避免锁定问题,并基本上将上卷移动到外部进程中,例如SQL作业。

我在网络上看到了一些选项,但我个人使用这个选项:

我在数据库的users表中存储了一个时间戳,每次用户操作(单击链接等)时都会更新该时间戳

然后,您需要做的就是通过检查时间戳,让所有用户知道他们的上一个操作是在X秒前完成的。 这样,您就可以拥有活动用户的姓名及其号码

此外,您可以说一个人处于活动状态的时间是完全可配置的

我对整个站点使用的方法。 对于不同的页面,可以使用不同的表来存储活动和页面id或其他内容。
发挥你的想象力。:)

最好是使用谷歌分析


基本上,您需要一个包含3个字段的表:

用户活动 -用户id -最后访问时间戳 -上次访问页面

每次用户请求数据时,必须更新上次访问的时间戳和上次访问的页面。 请注意,您需要手动提交#page8 part,因为它不会到达服务器

然后,您确实需要定义用户何时被视为非活动用户。假设:15分钟

#To get total users:
SELECT * FROM user_activity WHERE last_access_timestamp > NOW() - 15*60;

#To get total users for page #page8:
SELECT * FROM user_activity WHERE last_visited_page LIKE '%page8' AND last_access_timestamp > NOW() - 15*60;

根据您拥有的服务器容量,您可以使用对.php文件的重复请求来保持自定义会话跟踪的活动状态。但是要小心——这会导致服务器上没有负载,所以只有在您意识到后果的情况下才能这样做

使用
session_start()您可以在数据库表中使用ID、ip\u addr、session\u track\u ID、timestamp等字段编写自定义会话标识符。不要使用会话id本身,因为这可能是一个安全问题。更新您调用的每个.php中的时间戳

另外,创建一个custom.php,其中只更新时间戳。每60秒通过jqueryajax调用一次(或者您需要的任何时间间隔)。您也可以在这个步骤中使用一些安全性,以避免您提到的直接API调用。例如,发出一个在AJAX调用中返回的下一个请求id,该id需要是下一个请求的参数,如果不是,则不会更新时间戳

创建一个每90秒运行一次的cron(或者您需要的任何时间间隔,但显然要比AJAX调用中的时间长)。此cron将查找表中早于X秒的条目并将其删除

要了解活动用户的数量,只需计算表中的行数

在这种方法中还可以使用其他安全选项

这将解决您的问题—当用户关闭窗口时,没有AJAX调用会使会话保持活动状态,并且在几秒钟后会将会话从数据库中删除(在上面的场景中为90)

但请考虑,当你每60秒发出一个请求,你有1000个用户在线,它至少每小时60个请求到你的数据库!在这里,强优化是必须的


不过,在一个项目中,这个解决方案对我来说效果很好。

为什么不使用谷歌分析或Piwik之类的工具呢?还有很多商业产品提供实时跟踪,比如clicktale。他为什么要使用谷歌工具,而自己编写这个模型需要50-100行代码?并使其个性化…@TudorTudor如果我们谈论的是一个访问量很大的网站,我不认为50-100行代码就可以了。或者他们可以工作一天