【问题标题】:PHP Session Management, Counting Users With CookiePHP 会话管理,使用 Cookie 统计用户数
【发布时间】:2011-03-02 10:20:42
【问题描述】:

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

【问题讨论】:

  • 你的问题有点不清楚。是否要记录在任何给定时间有多少用户会话处于活动状态?
  • 一个用例/示例会很有帮助。这个问题实际上没有任何意义。
  • AJAX 聊天,计算当前在房间中的用户。是的,活跃的会话。

标签: php mysql ajax session session-cookies


【解决方案1】:

看看我的一篇文章!

set session in database in php

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

【讨论】:

  • 你如何解释离开聊天室的用户。我有一个解决这个问题的方法,但它不能解释用户离开,除非他们真的点击按钮离开,而大多数用户没有。编辑:我查看了您的帖子,但它并没有解决我要在这里解决的问题。
【解决方案2】:

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

一种方法可能是在数据库中保留一个 active_sessions 表。它可能看起来像这样:

create table active_sessions (
   sess_id varchar(32) primary key,
   lastseen timestamp
);

每次客户端请求更新时,插入/更新其会话 ID 的行,然后定期删除时间戳早于 T 的任何记录(对于某些 T 值,例如 30 秒或其他时间)

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

【讨论】:

  • 当然,如果你有 memcache 或 APC 或类似的东西,你最好将你的活动会话列表保存在一些内存缓存中,这样你就不会每次都对数据库运行更新客户端请求更新。
  • 用户计数器将被实现到 AJAX 脚本中以近乎实时地更新,因此计数器始终准确。当前计数器在加入时添加一个条目,并在退出时将其删除(但只有在他们单击按钮时才会删除)。是否有一种方法可以完全重写系统以检测有多少用户使用 cookie,或者在不实际单击按钮的情况下刷新计数器(会话数据库),如果有任何意义的话。
  • 另外,关于您的帖子,我们如何更新时间戳以防止仍然在房间内的 AFK 用户被计算在内。
  • 要获取最近的活动,为用户上次发帖的时间戳添加一列,并在他们发帖时更新。处于 AFK 状态可被视为仍处于活动状态(例如,在过去 15-30 秒内)但有一段时间没有发帖。
  • 我的回答是假设您正在通过 AJAX 轮询新帖子。如果轮询正在进行,则用户“在场”。所以你只想维护一个在过去 X 秒内轮询过的 session_id 列表。如果您想要一个“AFK”状态,您需要另一个时间戳,该时间戳仅在客户端执行某些用户驱动的操作(如发布)时才会更新。
猜你喜欢
  • 2020-11-03
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2017-07-17
  • 2012-02-09
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多