Mình đang định làm một ứng dụng nhỏ bằng Php. Trong đó có 1 phần là đếm số người đang online
. Cái này thì không rành, nên lên mạng search, Giờ làm được rồi nên share cách làm cho mọi người . 
1. Create table để lưu lại IP và thời gian hết hạn .
Tạo kết nối database ở đây
2. Tiếp theo ta phải kiểm tra xem có IP đang vào website của mình
Đên đây bạn đã có được IP vào trang web mình rồi . ex : 127.0.0.1
Bây giờ bạn xoá trong DB của mình nếu IP này đã xuất hiện rồi
Sau đó check lại lần nữa xem Ip này đã vào trang web mình chưa
Lúc này nếu logged = 1 tức là người này đã online vào website của mình rồi . Nếu vậy thì xoá ip nầy đi nếu IP này đã quá date
Đến đây nhiều bạn sẽ hỏi biến $n_secs là gì?ở đâu ra?và làm gì với nó .trước tiên tui xin giải thích $n_secs dùng để thiết lập giá trị thời gian quá date cho một IP . vì vậy bạn phải set value trước đoạn code lại cho $n_secs nhé
Còn ngược lại(logged = 0) IP này chưa có trong DB thì sao?thì thêm vô chứ còn gì nữa .
Và sẳn tiện đây tại sao mình không dọn dẹp luôn mấy IP đã quá date trước đó nhỉ?
Ok . Đến đây rồi thì những IP nào còn nằm trong database thì những IP đó đang online trong khoảng 1 ngày trở lại mà thôi. vây còn chờ gì nữa mà không lấy ra để biết chứ .
Vậy biết được số người rồi thì làm sao. Show ra chứ sao
Chúc bạn thành công !
. Cái này thì không rành, nên lên mạng search, Giờ làm được rồi nên share cách làm cho mọi người . 
1. Create table để lưu lại IP và thời gian hết hạn .
CREATE TABLE users_online (
id int(10) NOT NULL auto_increment,
ip varchar(15) NOT NULL default '',
timestamp varchar(15) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY id (id)
) TYPE=MyISAM;
id int(10) NOT NULL auto_increment,
ip varchar(15) NOT NULL default '',
timestamp varchar(15) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY id (id)
) TYPE=MyISAM;
Tạo kết nối database ở đây
2. Tiếp theo ta phải kiểm tra xem có IP đang vào website của mình
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$IP_ADDR = getenv( 'HTTP_X_FORWARDED_FOR' );
}
else if ( getenv( 'HTTP_CLIENT_IP' ) ) {
$IP_ADDR = getenv( 'HTTP_CLIENT_IP' );
}
else {
$IP_ADDR = getenv( 'REMOTE_ADDR' );
}
list($currentip, $temp) = explode(",",$IP_ADDR);
$IP_ADDR = getenv( 'HTTP_X_FORWARDED_FOR' );
}
else if ( getenv( 'HTTP_CLIENT_IP' ) ) {
$IP_ADDR = getenv( 'HTTP_CLIENT_IP' );
}
else {
$IP_ADDR = getenv( 'REMOTE_ADDR' );
}
list($currentip, $temp) = explode(",",$IP_ADDR);
Đên đây bạn đã có được IP vào trang web mình rồi . ex : 127.0.0.1
Bây giờ bạn xoá trong DB của mình nếu IP này đã xuất hiện rồi
$n_now = time ();
$sql = "delete from users_online where ip = '$currentip' ";
mysql_query ( $sql );
$sql = "delete from users_online where ip = '$currentip' ";
mysql_query ( $sql );
Sau đó check lại lần nữa xem Ip này đã vào trang web mình chưa
$logged = 0 ;
$sql = "select * from users_online where ip = '" . $currentip . "'";
if ( mysql_num_rows ( mysql_query ( $sql, $db_link ) ) > 0 ) {
logged = 1;
}
else {
logged = 0;
}
$sql = "select * from users_online where ip = '" . $currentip . "'";
if ( mysql_num_rows ( mysql_query ( $sql, $db_link ) ) > 0 ) {
logged = 1;
}
else {
logged = 0;
}
Lúc này nếu logged = 1 tức là người này đã online vào website của mình rồi . Nếu vậy thì xoá ip nầy đi nếu IP này đã quá date
if (logged ){
$n_now = time ();
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) and ip = '$currentip' ";
mysql_query ( $sql );
}
$n_now = time ();
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) and ip = '$currentip' ";
mysql_query ( $sql );
}
Đến đây nhiều bạn sẽ hỏi biến $n_secs là gì?ở đâu ra?và làm gì với nó .trước tiên tui xin giải thích $n_secs dùng để thiết lập giá trị thời gian quá date cho một IP . vì vậy bạn phải set value trước đoạn code lại cho $n_secs nhé
var $n_secs = 86400; // Ở đây là 1 ngày đó bạn.
Còn ngược lại(logged = 0) IP này chưa có trong DB thì sao?thì thêm vô chứ còn gì nữa .
else{
$timestamp = time ();
$sql = "insert into users_online ( id, ip, timestamp ) values ( '', '$currentip', '$timestamp' )";
mysql_query ( $sql, $db_link );
}
$timestamp = time ();
$sql = "insert into users_online ( id, ip, timestamp ) values ( '', '$currentip', '$timestamp' )";
mysql_query ( $sql, $db_link );
}
Và sẳn tiện đây tại sao mình không dọn dẹp luôn mấy IP đã quá date trước đó nhỉ?
$n_now = time ();
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) ";
mysql_query ( $sql );
$sql = "delete from users_online where timestamp < ( $n_now - $n_secs ) ";
mysql_query ( $sql );
Ok . Đến đây rồi thì những IP nào còn nằm trong database thì những IP đó đang online trong khoảng 1 ngày trở lại mà thôi. vây còn chờ gì nữa mà không lấy ra để biết chứ .
$sql = "select * from users_online ";
$count = mysql_num_rows ( mysql_query ( $sql, $db_link ) );
$count = mysql_num_rows ( mysql_query ( $sql, $db_link ) );
Vậy biết được số người rồi thì làm sao. Show ra chứ sao
<table border="0" width="100%"><tr><SUP><b>Users online:</b> <?= $count; ?></SUP></td><td><SUP><b>Your IP:</b> <?= $curentip; ?></SUP></td></tr></table>
Chúc bạn thành công !