在PPC的问答求助区曾提过一个问题,如下:
本人正在开发 一个小游戏,有一个在线打工的操作[每小时要作一次数据 统计 ]
大体情况如下
1:点击在线打工的时候,系统 记录打工的数据以及数据结算的时间
2:计划任务定时处理数据,进行用户结算
3:判断用户是否在线,根据是否在线进行不同的处理
其中1、2步已经解决 ,但是第3步的时候比较棘手,
我之前的处理是模仿UCHOME的SESSION表[其实根本就没存SESSIONID],
但是这个表里的数据记录的是最近一段时间有活动或者操作的用户[比如说该用户30分钟内有对页面 操作,而一旦该用户30分钟没操作,系统会通过JS触发把该条数据删除,标志离线]
但是这个并不能满足我的需求,我是要求只要用户把网站开着[哪怕我只把网站开着,然后一天不去动它],就标志该用户在线,而用户一旦把网站关闭,就标志该用户离线。
其实实质上上是要记录用户的网页是否打开,如今这个问题已经解决,现剖析下解决方案
其实我们可以分析,服务端要判断用户是否把网页打开,只有模拟用户向服务端发送请求才能做到,而且为了保证长时间的监控用户,用户必须每隔一段时间就向服务端请求一次
向服务端请求可以通过客户端的JS进行操作,在onload中用setinterval调用一个发送的函数即可
我的具体操作如下:
1. 用户点击打工,触动开始打工的函数,AJAX更改用户打工状态,同时向数据库写入一条新的打工数据,并且记录该打工数据的请求时间
2. 同时在这个函数中内置还要包括一个通过setinterval 定时请求的函数,这个函数保证用户在打工状态下每隔5秒向服务端请求一次,同时更新用户的最后一次请求的时间
3. 另外还有一个处理是要防止用户打开多个网页的时候重复请求,解决这个问题的话可以在每次请求时间更新的时候记录下COOKIE,下次执行请求前先判断下cookie的上次操作时间,
具体实现代码如下:
客户端
<script language="javascript">
var curworktype = {$mybabytradestatus};
//可定义值(当前时间 - 打工开始时间=?[在线的时候处理])