php下统计用户在线时间的一种尝试

下面列出几个比较常用的方法:

首先介绍一下所涉及的数据表结构,四个字段:

代码如下:

uid<int(10)> :用户id
session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取
login_time<int(10)> :登录时间
logout_time<int(10)> :登出时间

1. 客户端定时发送请求到服务器端。实现方法是在用户登录后,将uid,session_id,login_time插入一条记录,然后在客户端js设定一个计时器,比如每10分钟向服务器端发送一个请求,以此来达到更新登出时间的目的,当然这个间隔时间设定的越短,数据可能会越准确,不过相应的系统的负载也会越高,这个可以根据实际情况设定一个合适的值。这种方法广泛应用于webgame上,因为webgame的几乎所有请求都是ajax请求,不用刷新页面,一旦刷新页面,这个计时器就失去了价值,这也是这个方法的局限性。
2. 服务器设定一个定时轮询的脚本。这个方法是在服务器端写一个定时执行的脚本,比如5分钟执行一次,根据数据库中的记录来判断每个会话的session_id是否还存在于服务器上,如果存在就更新logout_time,不存在就跳过。这样也能比较准确的统计在线时间,不过缺点是需要有服务器的控制权,不然无法设定定时脚本,linux系统可以通过crontab实现,windows系统可以通过计划任务来完成。如果你只是买的虚拟主机,那么这个方法也同样不适合你。
3. 在用户每次活动时更新一下登出时间。这样在用户不活动或者退出的时候,登出时间就自然而然的存在于数据库里了,这也是本文着重讨论的方案。下面给出实现方法。
首先,在用户登录成功后,记录下其uid,session_id,并将现在时间作为登陆时间,现在时间+600s作为登出时间,插入数据库。


代码如下:

$uid = $_SESSION['uid'] = $info['id'];
$session_id = $_SESSION['session_id'] = session_id();
$login_time = time();
$logout_time = time()+600;
$sql = "INSERT INTO member_login (uid,session_id,login_time,logout_time) values($uid,'$session_id',$login_time,$logout_time)";
mysql_query($sql);

然后在用户每次活动,也就是每点击一个页面时,如果session存在也就是处于登录状态时,更新用户登出时间


代码如下:

if($_SESSION['uid']){
$uid = $_SESSION['uid'];
$session_id = $_SESSION['session_id'];
$logout_time = time()+600;
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id='$session_id'";
mysql_query($sql);
}

这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服务器需求,而且也可以比较准确的统计用户的在线时间。
缺点也很明显,增加了数据库的更新操作,增加了系统的负载,不过对于中小型网站来说应该不是问题。

(0)

相关推荐

  • 也谈php网站在线人数统计

    function checkOnline($userid,$tempid=null)      {      $conn = connect(); //对于所有用户      //先设置自己为在线      $stmt = "UPDATE ".DB_NAME.".USER SET IsOnline='Y' WHERE UserID=".$userid;      $result = query($stmt,$conn);      //info($stmt);   

  • php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟) $online=file($filename); //PHP file() 函数把整个文件读入一个数组中.与 file_get_contents() 类似,不同的是 fi

  • php+memcache实现的网站在线人数统计代码

    今天闲来无事,想在博客统计中显示在线人数.在网上找了好多例子,不是数据库存储数据就是文件存储,代码也看起来过于复杂. 晚上回来后,构思了下,看到我服务器中安装有 Memcache 服务,何不用 Memcache 实现呢. 下面就来讲下实现过程: 效果图: 实现代码: <?php $mc = new Memcache (); // 连接memcache $mc->connect ( "127.0.0.1", 11211 ); // 获取 在线用户 IP 和 在线时间数据 $o

  • php下用cookie统计用户访问网页次数的代码

    如何创建 cookie? setcookie() 函数用于设置 cookie. 注释:setcookie() 函数必须位于 <html> 标签之前. 创建您的第一个PHP cookie 当您创建一个cookie,使用函数setcookie,你必须指定三个参数.这些参数是setcookie(名称,值,过期): 姓名:您的Cookie的名称.您将使用此名称以后检索你的cookie,所以不要忘记它! 价值:在您的cookie中存储的值.共同价值观是用户名(字符串)和最后的访问时间(日期). 到期:日

  • php实现统计网站在线人数的方法

    本文实例讲述了php实现统计网站在线人数的方法.分享给大家供大家参考.具体实现方法如下: <?php function getIpAddress() { // 取得当前用户的IP地址 if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (ge

  • php实现用户在线时间统计详解

    首先介绍一下所涉及的数据表结构,四个字段: 代码如下: 复制代码 代码如下: uid<int(10)> :用户id session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取 login_time<int(10)> :登录时间 logout_time<int(10)> :登出时间 1.客户端定时发送请求到服务器端.实现方法是在用户登录后,将uid,session_id,login

  • php使用Session和文件统计在线人数

    <?php /* @ PHP 在线人数统计程序 Copyright (c) by Pader 1:25 2009年1月7日 How to use it: <script src="online.php"></script> note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确 例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样 如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人 这个小巧的程序解

  • PHP统计当前在线用户数实例讲解

    通常,当访客访问网站时,页面记录用户的cookie信息,当cookie过期即认为用户不在线.本文中我们使用PHP记录访客IP,并在客户端记录cookie及过期时间,同时通过新浪IP地址接口,获取访客的地理位置(本例只记录省份),一并写入mysql表中,即可统计一段时间内的访客总数,也可以查看访客的地区分布. HTML 我们在页面上放置一个显示当前在线人数的div#total以及一个用于展示访客地区分布的列表#onlinelist,默认我们在列表中放置一张与加载动画图片,后面我们用jQuery控制

  • php下统计用户在线时间的一种尝试

    下面列出几个比较常用的方法: 首先介绍一下所涉及的数据表结构,四个字段: 复制代码 代码如下: uid<int(10)> :用户id session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取 login_time<int(10)> :登录时间 logout_time<int(10)> :登出时间 1. 客户端定时发送请求到服务器端.实现方法是在用户登录后,将uid,sessio

  • js统计网页在线时间的脚本

    每xxxxx毫秒检测一次是否在线, TR_COUNT次之后设定改用户为假死状态(即不在当前页面活动,afk..) 当页面关闭时把停留时间送出, /**//* ---------------------------------------------------------------------------- * Script Name: online.js * Last Modified: 2008-4-13 22:25 * Author: meyu * Copyright (c) 2008

  • asp实现一个统计当前在线用户的解决方案

    一个统计当前在线用户的解决方案 在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数.游客人数.会员人数.在线用户列表,包括游客.会员和管理员(如果是游客,则自动生成游客的ID,如果是会员,则显示会员姓名).因为它要求有实时性,则首先我将用global.asa解决的想法pass掉. 问题的关键是如何判断用户已经离开,和当用户离开时如何执行一个文件或一个函数. 经过和网上一些朋友的探讨,终于解决了这个问题. 解决的原理为:编写一个通用页面,所谓的

  • Oracle 统计用户下表的数据量实现脚本

    要想统计用户下所有表的数据量,可以查看user_tables,此表里面是统计信息,当然这个可能不太准,要想非常精确,需要直接count表.下面的脚本有异常不中断,可以重复执行的特点. create table bk_count_tables ( owner VARCHAR2(30), table_name VARCHAR2(30), part_col varchar2(100),--分区字段 row_s number, gather_time date ); create index ind_b

  • asp.net 用户在线退出更新实现代码

    最主要的问题是关闭浏览器的时候如何更新用户在线列表 网上流传的方法是不停的ajax异步发送请求,当不再请求的时候就可以判断用户已经关闭浏览器 复制代码 代码如下: var x=0; function myRefresh() { var httpRequest = new ActiveXObject("microsoft.xmlhttp"); httpRequest.open("GET", "test.aspx", false); httpRequ

  • 粗略计算在线时间,bug:ip相同

    <?PHP /* CREATE TABLE `db_online` (   `ip` char(20) default NULL,   `time` char(20) NOT NULL default '',   `name` char(200) NOT NULL default '游客' ) TYPE=MyISAM */ //粗略计算在线时间,bug:ip相同(局域网->外部网)者,只记录一人.不过几率很少 session_start(); //超时时间 $out_time=300;//60

  • 写一个用户在线显示的程序

    在开始这篇文章时,作者假设读者已能够写出一个用户的登入认证程序. ---------------------------------------------------------- 记数器可完成访问 web 页的总次数,但却不能得知一个时段中访问量的动态记载,下面就来介绍如何写一个各个时段动态显示访问量的方法. 要记载访问量,首先就要在 mysql 内建立一个数据库,姑且给这个数据库取名为 line,同时建立一个名为 line 的数据表,表内的字段分别为"用户名(name varchar(20

  • Android基于AlarmManager实现用户在线心跳功能示例

    本文实例讲述了Android基于AlarmManager实现用户在线心跳功能.分享给大家供大家参考,具体如下: 在做即时通信或者其他检测是否在线等操作时要用到心跳.比较常用的是AlarmManager全局定时器 去实现. AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个

随机推荐