Кто может поделиться скриптом пользователей онлайн, кто шас на портале показывал цифрами, сколько их шас, не нагружая сервер.
А там делать по сути нечего. Берёшь сессию каждого, берёшь таймстамп и записываешь в БД. При каждом обновлении страницы обновляешь данные и удаляешь записи тех пользователей, которые не проявили активность в течении N минут) А вывод просто SELECT COUNT (*) и т.д...
Я думаю лучше запостить пример. Создаём таблицу: Code: CREATE TABLE `sessions` ( `sid` varchar(32) NOT NULL, `lastdate` datetime NOT NULL ) ENGINE=MyISAM; Сам скрипт: PHP: <?php session_start(); $interval = 15; //Интервал бездействия пользователя в минутах $sid = session_id(); //Берём ID сессии $sql = mysql_query("SELECT * FROM `sessions` WHERE `sid` = '".$sid."'"); if($sql && mysql_num_rows($sql)){ /* Если сессия с таким ID уже записана, обновляем */ mysql_query("UPDATE `sessions` SET `lastdate` = NOW() WHERE `id_session`='".$sid."'"); }else{ /* Если нет, добавляем */ mysql_query("INSERT INTO `sessions` VALUES('".$sid."', NOW())"); } /* Удаляем записи пользователей не проявивших активность в течении времени указанного в $interval */ mysql_query("DELETE FROM `sessions` WHERE `lastdate` < NOW() - INTERVAL '".$interval."' MINUTE"); ?> И вывод типа того: Code: SELECT COUNT(*) AS `online` FROM `sessions`
bombeg, В своих скриптах использую, а это всего лишь пример. Может мне следовало бы ещё класс работы с mysql выложить, что всё было круто? Зачем? Если ТС в этом разбирается он без труда заточит как надо. Или например может добавить IGNORE, ключи...да в общем что угодно
Думаю вариант не такой Собственно скрипт: <?Php session_start(); define("MAX_IDLE_TIME", 3); function getOnlineUsers(){ if ( $directory_handle = opendir( session_save_path() ) ) { $count = 0; while ( false !== ( $file = readdir( $directory_handle ) ) ) { if($file != '.' && $file != '..'){ if(time()- fileatime(session_save_path() . '\\' . $file) < MAX_IDLE_TIME * 60) { $count++; } } } closedir($directory_handle); return $count; } else { return false; }} echo 'Пользователей онлайн: ' . getOnlineUsers() . '<br />'; > Подсчёт пользователей, стоит на месте, сесия необновляеться, если только таким действием его убивать session_save_path("/path/to/custom/directory"); А если путь до дир незнаеш как быть?
Уф.. предложу другой вариант: В базе создать таблицу с полями: id,ip,br,date Там где нужно вывести число онлайн: