我想更新一个mysql表字段值为"脱机"当用户失去连接或从我的网站注销。这可能吗?如果是,那么是怎么做的?
不可能。
与其使用一个字段并将其设置为online
和offline
,不如将其设置为INT
字段。每次用户与您的网站交互时,只需用当前时间戳($_SERVER['REQUEST_TIME']
)更新字段。使用该字段,您可以通过查看用户活动了多长时间来推断用户的状态(例如<=30min为在线,而>30min为离线)。
首先,使用PHP会话,为每个访问者分配一个唯一的随机ID。然后创建一个DB行,其中包含这个ID、创建ID的时间和最后一次在线看到ID的时间。
然后,每隔60秒左右,使用jQuery的.load()从服务器加载一个PHP脚本,该脚本只更新mysql数据库中的lastrongeen字段。工作。
为避免溢出,请执行cronjob,或使用随机方法,每X个请求或每分钟清理一次数据库。
使用PHP Session会有帮助。每当用户登录时,在数据库字段中更新PHP的session_id(),众所周知,PHP将会话数据存储在tmp文件夹中。您可以使用cron job扫描此文件夹以查找活动会话。通常会话文件看起来像sess_session_id()。
算法如下
- 用户登录
- 在数据库中更新会话值
- 更新登录状态为OnLine
每1分钟运行一次cron作业,编写CLI程序,这样你就不需要进行不必要的HTTP请求。这个命令行程序将扫描包含会话id的表,您需要在tmp文件夹中搜索相同的(session_id前缀为sess_)。如果文件存在,则用户在线;如果文件不存在,则用户离线。