在PHP MySQL平台上记录用户活动

时间:2012-10-18 19:21:18

标签: php mysql logging client

我基于以下想法开发了一个服务器 - 客户端应用程序:

客户端(Windows应用程序)与服务器(PHP网页)一起使用,主要类似于基于套接字的客户端 - 服务器应用程序。客户端将原始数据发送到PHP网页,PHP脚本将检查/处理收到的数据,最后脚本返回客户端的答案(数据接受/拒绝/等)。

基本的想法是客户端“每隔X秒”“ping”服务器,即使客户端处于活动状态。记录客户端活动的最佳解决方案是什么?   例如:

Client1 started application at Time1       and it "ping" Server for lets say 30 minutes, after that interval the Server stop receiving "pings" from the client;
Client2 started application at Time1+10min and it "ping" Server for lets say 40 minutes, after that interval the Server stop receiving "pings" from the client;
Client1 started application at Time1+35    and it "ping" Server for lets say 60 minutes, after that interval the Server stop receiving "pings" from the client;

** Server stop receiving "pings" from client means there is no activity for at least 1 minute

我需要一份能够提供以下数据的最终报告:

Client   |  Start at   |    End at   | Active
=========+=============+=============+========
Client1  | Time1       | Time1+30min | 30min 
Client2  | Time1+10min | Time1+50min | 40min 
Client1  | Time1+35min | Time1+95min | 60min 

我不知道如何制作我的MySQL日志表以及通过PHP存储哪些信息以供将来报告使用。

欢迎提出任何问题/意见。

编辑:我不需要任何PHP代码来记录我的输入,我不需要你的MySQL CREATE TABLE或SELECT命令。我只是想要一个存储所有记录的好方法,以及从中检索一些信息的好方法。感谢您对帖子进行了低估,直到最后才开始阅读。

1 个答案:

答案 0 :(得分:1)

考虑到你没有在“X秒”中定义“X”,@ MoeTsao的建议也不错。如果“X”大约是3600或更高,那就不会太糟糕了。也许你因为对他不好而不是根据你的(现在详细说明的)“X”的价值来改变他的想法并进行修改而屈服于他?如... ...

创建一个这样的日志表:

 client_id
 start_time
 end_time

然后,在每个请求上,执行更新:

 update log_table
 set end_time = NOW()
 where client_id = $client_id
 and start_time >= date_sub(now(), interval 1 minute)

检查已更新的行数(请参阅编码手册)。

如果更新了一行,那么就完成了。如果没有更新,则它是新客户端或空闲的客户端,然后您必须执行插入:

 insert into log_table (client_id, start_time, end_time)
 values ($client_id, now(), now())

(与我的伪代码相反,请在查询中使用位置参数)。

创建报告是微不足道的(所有必要的列都在您存储的行中),并留作原始海报的练习。 :)