ÔÚÂÛ̳ÀïÓÐÈËÎÊÎÒÈçºÎͳ¼ÆÔÚÏßÈËÊý£¿ÎÒÒ²²»ÖªµÀʲôÊÇ×îºÃµÄ·½·¨¡£ÏÂÃæÊDZ¾Õ¾µÄʵÏÖµÄÔ­Àí£¬ÎÒ°ÑËüд³öÀ´£¬¹©´ó¼Ò²Î¿¼¡£ÕâÖ»ÊÇÎҵķ½·¨£¬¿Ï¶¨²»ÊÇ×îºÃµÄ£¬»¹Ï£Íû¸ßÊÖÃÇÓèÒÔÖ¸Õý¡£

Æäʵ£¬ÒªÕæÕýͳ¼ÆÍ¬Ê±ÔÚ²¢·¢ÔÚÏßµÄÈËÊý£¬ÊÇÒ»¼þ²»Ì«ÏÖʵµÄÊ£¬ÕâÊÇÒòΪHTTPЭÒéÊÇÖÖÎÞ״̬µÄЭÒé¡£µ±¿Í»§¶ËÏò·þÎñÆ÷·¢³öÒ»¸öÇëÇóʱ£¬·þÎñÆ÷»áÂíÉϽ¨Á¢Ò»¸öеÄTCP/IPÁ¬½Ó£¬ÔڸûỰ½áÊøºó£¬ÈçÒ³ÃæÍêÈ«ÔØÈëºó£¬Õâ¸öÁ¬½Ó¾Í¹Ø±ÕÁË¡£Ò»°ãÀ´Ëµ£¬ÔÚÏßÈËÊýÖ¸µÄ¶¨ÊÇÔÚÒ»¶¨Ê±¼ä¶ÎÄÚͬʱ·ÃÎÊÕ¾µãµÄÈËÊý£¬¶ø²»ÊÇ»ùÓÚHTTPЭÒéµÄ²¢·¢Á¬½ÓÊý¡£

ÈÃÎÒÃÇÏÈÀ´¿´¿´Ò»¸ö·Ã¿ÍÊÇÈçºÎ·ÃÎÊÒ»¸öÍøÕ¾µÄ¡£ËûÔÚä¯ÀÀÆ÷µÄµØÖ·À¸ÀïÊäÈëÁËÄ¿±êÍøÕ¾µÄµØÖ·£¬È»ºóÔÚÒ»¶Îʱ¼äÄÚ³ÖÐøä¯ÀÀ¸ÃÍøÕ¾µÄÍøÒ³£¬×îºó£¬¹Ø±Õä¯ÀÀÆ÷»òÊäÈëеÄÍøÖ·¡ª¡ªä¯ÀÀ½áÊøÁË¡£¶ÔÓÚ·þÎñÆ÷¶ËÀ´Ëµ£¬·Ã¿Íµ½À´ÊÇ¿ÉÒÔÖªµÀµÄ£¬·Ã¿ÍÔÚä¯ÀÀÒ³ÃæÒ²ÊÇ¿ÉÒÔÖªµÀµÄ£¬¿ÉÊÇÔõô֪µÀʲôʱºò×ßµÄÄØ£¿ÓÉÓÚHTTPЭÒéÊÇÎÞ״̬µÄ£¬ËùÒÔÎÞ·¨ÖªµÀ¡£Í¨³£µÄ×ö·¨ÊǼÇÏ·ÿÍ×îºóÒ»´Îä¯ÀÀÕ¾µãÒ³ÃæµÄʱ¼ä¡£Èç¹û¸Ã·Ã¿ÍÔÚÒ»¸öÌØ¶¨µÄʱ¼äÄÚûÓÐÐµĶ¯×÷£¬ÄÇô¿ÉÒÔÈÏΪËû×ßÁË¡£

¸ù¾ÝÉÏÃæµÄÕâ¸ö˼·£¬ÎÒ¾õµÃ×îºÃÓÃÊý¾Ý¿â£¬ÒòΪÊý¾Ý¿âÒª±ÈÆäËû·½·¨ÈçÎı¾ÎļþµÄЧÂÊÒª¸ß¡£ÏÂÃæµÄÀý×ÓÊÇʹÓÃMySQLµÄ£¬ºÜÈÝÒ×ʹÓÃÆäËûÀàÐ͵ÄÊý¾Ý¿âϵͳ¡£È»ºó£¬ÔÚËùÓеÄÒ³ÃæÖе÷ÓÃÕâ¸öPHPÎļþ£¬Ò»·½Ãæ¸üÐÂÊý¾Ý£¬ÁíÒ»·½Ãæ¿ÉÒÔÏÔʾÔÚÏßµÄÈËÊý¡£µ«ÊÇ£¬ÓÐÒ»¸öÎÊÌâ--µ½µ×Ôڶ೤ʱ¼äÄÚ·ÃÎʵÄÈËËãÊDz¢·¢µÄÄØ£¿Ò»°ãÀ´Ëµ£¬Êǰë¸öСʱ£¬Ò²¾ÍÊÇ1800Ã룬¾ßÌåµÄÒª¸ù¾ÝÍøÕ¾µÄÇé¿öÀ´È·¶¨¡£Õâ¸öʱ¼äÔ½³¤£¬Í³¼Æ³öµÄ²¢·¢ÔÚÏßµÄÈËÊý¾ÍÔ½¶à¡£±¾Õ¾µÄÊÇ15·ÖÖÓ£¬900Ãë¡£Ó÷ÃÎÊÕßµÄIPµØÖ·±íʾһ¸ö·ÃÎÊÕßÊǸö²»´íµÄ·½·¨¡£ÔÚ²¦ºÅÉÏÍøµÄÇé¿öÏ£¬±»·ÖÅäÁËÏàͬIPµØÖ·µÄÁ½¸öÓû§ÔÚ¶Ìʱ¼äÄÚä¯ÀÀͬһ¸öÍøÕ¾µÄ¸ÅÂÊÊǺÜСµÄ¡£

Ê×ÏÈ£¬ÓÃMySQLµÄ¹¤¾ß½¨Ò»¸ö±í£º

CREATE TABLE ccol(
id integer not null auto_increment, #¼Ç¼µÄID
ip char(15) not null, #·ÃÎÊÕßµÄIPµØÖ·
dtstamp datetime not null, #×îºó·ÃÎÊʱ¼ä
uri char(255), #·ÃÎÊÕßÇëÇóµÄURI
primary key (id)
);

È»ºó£¬Ð´Ò»¶ÎPHP´úÂ룺

<?
/*
Îļþ:ccol.php - ConCurrent OnLine statistics
Ä¿µÄ:ͳ¼ÆÍ¬Ê±ÔÚÏßä¯ÀÀµÄÈËÊý
×÷Õß:Hunte, hunte@phpuser.com
ÐÞ¸Ä:2000-4-25
*/

¡çduration=1800;
require "db.php";
//°üº¬DBSQL£¬ÏêÇé¿ÉÒԲο¼ÎÒµÄÁíһƪÎÄÕÂ
¡çccol=new dbSQL;
¡çccol->connect();
¡çccol->query("DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))>¡çduration");
//ɾ³ý³¬¹ý°ëСʱµÄ¼Ç¼
¡çccol->query("SELECT * FROM ccol WHERE ip='¡çREMOTE_ADDR'");
//Åжϵ±Ç°µÄIPÊÇ·ñÔڸñíÖдæÔÚ
if (¡çccol->nf())//ÓУ¿
{
¡çccol->next_record();//ÏÂÒÆÕÒµ½µÄ¼Ç¼Êý×éµÄÖ¸Õë
¡çid=¡çccol->f('id');
¡çccol->query("UPDATE ccol SET dtstamp=now(), uri='¡çREQUEST_URI' WHERE id=¡çid");
//ÉèÖÃ×îºó·ÃÎÊʱ¼äºÍ·ÃÎÊÒ³Ãæ
}
else//ûÓÐ
{
¡çccol->query("INSERT INTO ccol VALUES (0, '¡çREMOTE_ADDR', now(), '¡çREQUEST_URI')");
}

¡çccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=¡çduration");
//ÕÒ³öÔÚ°ë¸öСʱÄڵļǼ£¬ºóÃæµÄWHERE×Ó¾ä¿ÉÓпÉÎÞ--³¬³öʱ¼äµÄÒѾ­±»É¾³ýÁË
¡çccol->next_record()
echo "ÔÚÏßÈËÊý£º", ¡çccol->f('ccol');
¡çccol->free_result();
?>

ÔõôÓÃÄØ£¿ÔÚÕ¾µãµÄÿ¸öÒ³ÃæµÄÉÏÃæµ÷ÓÃÕâ¸ö³ÌÐò£¬¾ÙÀýÀ´Ëµ£º
--index.php
...
<!--ÏÔʾÔÚÏßÈËÊý->
<?require ../stats/ccol.php?>
...

µ±È»£¬Õâ¶Î´úÂ뻹ÓиĽøµÄÓàµØ¡£ÀýÈ磬ÔÚÿ´Îµ÷ÓÃÊǶ¼ÒªÉ¾³ý°ëСʱǰµÄ¼Ç¼£¬ÕâÊÇûÓбØÒª¶øÇһήµÍЧÂÊ¡£¿ÉÒÔÒ»¸öʲô°ì·¨¹ý¸ü³¤µÄʱ¼äÔÙ×ö£¬±ÈÈç6Сʱ¡£´ó¼Ò×Ô¸ö¶ùÏëÏë°É£¬ÎҾͲ»ËµÁË¡£

ÕâÖÖ·½·¨Ö»ÒªÉÔ×öÐ޸ģ¬¾Í¿ÉÒÔÅÉÉϱðµÄÓô¦£¬ÈçSESSIONµÄ¹ÜÀí¡¢ÍøÕ¾µÄ·ÃÎÊͳ¼Æ·ÖÎöµÈ¡£

--»¶Ó­¸ßÊÖÖ¸Õý£¡