Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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会话管理,使用Cookie统计用户数_Php_Mysql_Ajax_Session_Session Cookies - Fatal编程技术网

PHP会话管理,使用Cookie统计用户数

PHP会话管理,使用Cookie统计用户数,php,mysql,ajax,session,session-cookies,Php,Mysql,Ajax,Session,Session Cookies,我想在加载页面时,在用户的浏览器中存储cookie。然后,使用AJAX,计算使用该cookie的用户数,并每隔1秒左右将其发送到数据库行。这是如何做到的?看看我的一篇帖子 就在您存储数据时,向mysql添加一个时间戳,并计算唯一的行,其中time>time()=30;延迟30秒。因为听起来像是在实现聊天室,所以可以安全地假设正在进行一些AJAXy轮询(客户端非常频繁地检查更新) 一种方法可能是在数据库中保留一个活动的_sessions表。可能是这样的: create table active_

我想在加载页面时,在用户的浏览器中存储cookie。然后,使用AJAX,计算使用该cookie的用户数,并每隔1秒左右将其发送到数据库行。这是如何做到的?

看看我的一篇帖子


就在您存储数据时,向mysql添加一个时间戳,并计算唯一的行,其中time>time()=30;延迟30秒。

因为听起来像是在实现聊天室,所以可以安全地假设正在进行一些AJAXy轮询(客户端非常频繁地检查更新)

一种方法可能是在数据库中保留一个活动的_sessions表。可能是这样的:

create table active_sessions (
   sess_id varchar(32) primary key,
   lastseen timestamp
);
每次客户端请求更新时,插入/更新会话ID的行,然后定期删除时间戳早于T的任何记录(某些值为T,如30秒或其他值)


数一数表中的行,可以很好地估计有多少客户端仍然处于活动状态。

您的问题有些不清楚。您想记录在任何给定时间有多少用户会话处于活动状态吗?用例/示例会很有帮助。这个问题目前还没有真正意义。AJAX聊天,计算当前房间中的用户数。是的,活动会话。但是你如何解释离开聊天室的用户。我有一个解决这个问题的方法,但它不能解释用户离开,除非他们真的点击按钮离开,而大多数用户没有。编辑:我看了你的帖子,它并没有解决我在这里试图解决的问题。当然,如果你有memcache或APC之类的东西,您最好将活动会话列表保存在一些内存缓存中,这样就不会在每次客户端请求更新时都对DB运行更新。用户计数器将被实现到AJAX脚本中,以便近实时地更新,因此计数器总是准确的。当前计数器在联接时添加一个条目,并在退出时删除它(但它仅在单击按钮时删除)。是否有一种方法可以完全重写系统,以检测有多少用户在使用cookie,或者有一种方法可以在不点击按钮的情况下刷新计数器(会话数据库),如果这样做有意义的话,我们如何更新时间戳以防止仍在房间中的AFK用户被计数。若要获取最近的活动,请为用户上次发布的时间戳添加一列,并在他们发布时更新。成为AFK可以被认为是仍然活跃的(比如,在过去的15-30秒内),但在一段时间内没有发布过帖子。我的答案是假设你正在通过AJAX轮询新帖子。如果正在进行轮询,则用户“在场”。因此,您只需要维护在最后X秒内轮询的会话ID的列表。如果您想要一个“AFK”状态,那么您需要另一个时间戳,该时间戳仅在客户端执行某些用户驱动的操作(如发布)时更新。