Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Скрипт Пользователей онлайн |

16.03.2009, 09:10
|
|
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме: 19334
Репутация:
0
|
|
Скрипт Пользователей онлайн
Кто может поделиться скриптом пользователей онлайн, кто шас на портале показывал цифрами, сколько их шас, не нагружая сервер.
|
|
|

16.03.2009, 09:15
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
А там делать по сути нечего.
Берёшь сессию каждого, берёшь таймстамп и записываешь в БД. При каждом обновлении страницы обновляешь данные и удаляешь записи тех пользователей, которые не проявили активность в течении N минут)
А вывод просто SELECT COUNT (*) и т.д...
|
|
|

16.03.2009, 09:24
|
|
Постоянный
Регистрация: 19.03.2007
Сообщений: 684
Провел на форуме: 3152874
Репутация:
1020
|
|
Ну таких скриптов прут пруди, забей в гугле, или как написал .:EnoT:. напиши сам.
|
|
|

16.03.2009, 09:38
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
Я думаю лучше запостить пример.
Создаём таблицу:
Код:
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");
?>
И вывод типа того:
Код:
SELECT COUNT(*) AS `online` FROM `sessions`
|
|
|

16.03.2009, 09:42
|
|
Участник форума
Регистрация: 27.10.2008
Сообщений: 244
Провел на форуме: 963613
Репутация:
428
|
|
.:EnoT:., прочитай про ON DUPLICATE
|
|
|

16.03.2009, 09:54
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
bombeg, В своих скриптах использую, а это всего лишь пример. Может мне следовало бы ещё класс работы с mysql выложить, что всё было круто? Зачем? Если ТС в этом разбирается он без труда заточит как надо. Или например может добавить IGNORE, ключи...да в общем что угодно
|
|
|

16.03.2009, 10:22
|
|
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме: 19334
Репутация:
0
|
|
Думаю вариант не такой
Собственно скрипт:
<?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");
А если путь до дир незнаеш как быть?
|
|
|

16.03.2009, 11:50
|
|
Участник форума
Регистрация: 03.07.2008
Сообщений: 177
Провел на форуме: 644324
Репутация:
11
|
|
Уф.. предложу другой вариант:
В базе создать таблицу с полями: id,ip,br,date
Там где нужно вывести число онлайн:
<?
$date=time();
$ip=getenv('REMOTE_ADDR');
$br=$_SERVER['HTTP_USER_AGENT'];
$len_online_inbase=mysql_num_rows(mysql_query('SEL ECT id FROM '.$table_online_user." WHERE ip='".$ip."' and br='".$br."' LIMIT 1"));
if($len_online_inbase==1){mysql_query('UPDATE '.$table_online_user.' SET date='.$date." WHERE ip='".$ip."' and br='".$br."' LIMIT 1");}
else{mysql_query('INSERT INTO '.$table_online_user." SET ip='".$ip."',br='".$br."',date=".$date);};
$date_time_out=$date-180; //// 180 - 3 минуты
$len_online_now=mysql_num_rows(mysql_query('SELECT * FROM '.$table_online_user.' WHERE date > '.$date_time_out));
echo 'сейчас: '.$len_online_now.' на сайте';
?>
Последний раз редактировалось rcc0023; 16.03.2009 в 11:53..
|
|
|

16.03.2009, 15:51
|
|
Новичок
Регистрация: 26.02.2009
Сообщений: 6
Провел на форуме: 19334
Репутация:
0
|
|
Ето понятно, есчё + подключить скрипт, если несложно допиши его, зарание благодарен
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
продаю 7 dig icq
|
Ili@s |
ICQ - Покупка, продажа |
2 |
07.05.2009 06:51 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|