Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Количество пользователей онлайн через сессии
 
 автор: kukuikar   (27.12.2007 в 14:05)   письмо автору
 
 

Можно ли как-то посчитать количесво пользователей онлайн на сайте через сессии?

   
 
 автор: cheops   (27.12.2007 в 14:38)   письмо автору
 
   для: kukuikar   (27.12.2007 в 14:05)
 

Возможно вас заинтересует скрипт по ссылке http://www.softtime.ru/scripts/online.php.

   
 
 автор: kukuikar   (27.12.2007 в 23:45)   письмо автору
 
   для: cheops   (27.12.2007 в 14:38)
 

а без MySQL, это как у mihdan?

   
 
 автор: Loki   (27.12.2007 в 16:16)   письмо автору
 
   для: kukuikar   (27.12.2007 в 14:05)
 

Если у хостера они не хранятся в общей куче, то можно.

   
 
 автор: kukuikar   (27.12.2007 в 23:48)   письмо автору
 
   для: Loki   (27.12.2007 в 16:16)
 

в общей куче с чем?

   
 
 автор: Loki   (28.12.2007 в 10:29)   письмо автору
 
   для: kukuikar   (27.12.2007 в 23:48)
 

с сессиями других сайтов.

   
 
 автор: mihdan   (27.12.2007 в 16:28)   письмо автору
 
   для: kukuikar   (27.12.2007 в 14:05)
 

есть


<?Php
session_save_path
("/path/to/custom/directory"); 
session_start();
define("MAX_IDLE_TIME"3);
function 
getOnlineUsers(){
if ( 
$directory_handle opendirsession_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 />';
?> 

   
 
 автор: kukuikar   (27.12.2007 в 23:47)   письмо автору
 
   для: mihdan   (27.12.2007 в 16:28)
 

а для session_save_path нужен полный путь или так /tmp можно? кстати по умолчанию там и стоит /tmp

   
 
 автор: Unkind   (28.12.2007 в 00:00)   письмо автору
 
   для: kukuikar   (27.12.2007 в 23:47)
 

> нужен полный путь или так /tmp можно
/tmp и есть полный путь.

   
 
 автор: kukuikar   (28.12.2007 в 01:10)   письмо автору
 
   для: Unkind   (28.12.2007 в 00:00)
 

а это что тогда /home/folder01/tmp ?
Не полный путь?

   
 
 автор: Unkind   (28.12.2007 в 01:49)   письмо автору
 
   для: kukuikar   (28.12.2007 в 01:10)
 

Это полный путь до другой папки, не имеющей общего с /tmp. Слеш в начале означает путь от корня.

   
 
 автор: kukuikar   (28.12.2007 в 19:25)   письмо автору
 
   для: Unkind   (28.12.2007 в 01:49)
 

значит у меня все сессии в куче с остальными сайтами.....
а в принципе я могу переназначить путь до session_save_path("/home/userXXX/site1_sessions") так? да?

   
 
 автор: Unkind   (28.12.2007 в 20:29)   письмо автору
 
   для: kukuikar   (28.12.2007 в 19:25)
 

Да. Но я Вам советую использовать для подсчета онлайна таблицу в базе данных. Иначе скорость выполнения кода mihdan'а будет такой, что за это время можно будет три раза поужинать.

   
 
 автор: Loki   (29.12.2007 в 10:13)   письмо автору
 
   для: Unkind   (28.12.2007 в 20:29)
 

>Иначе скорость выполнения кода mihdan'а будет такой, что за это время можно будет три раза поужинать.
Сейчас проверил пользователей по всему серверу:
Время генерации: 0.019 сек.
Так что ужин у вас окажется недолгим:)

   
 
 автор: Unkind   (29.12.2007 в 10:46)   письмо автору
 
   для: Loki   (29.12.2007 в 10:13)
 

> Сейчас проверил пользователей по всему серверу:
> Время генерации: 0.019 сек.

А Вы clearstatcache() в его функцию добавили? Без нее код будет давать неточные результаты.
Сейчас проверил на сервере папку с 10K файлов и очисткой кеша ~ от 3 до 6 с.

   
 
 автор: Loki   (29.12.2007 в 11:15)   письмо автору
 
   для: Unkind   (29.12.2007 в 10:46)
 

>А Вы clearstatcache() в его функцию добавили?
А зачем? Данные кэшируются только в рамках выполнения одного скрипта. А в процессе выполнения мы вызываем один файл не больше одного раза.

Кстати, после того как переписал этот код под PHP5, время выполнения упало до 0.001 сек.
Хотя, понятное дело, загрузка моего сервера меньше чему у Вашего.

   
 
 автор: Unkind   (29.12.2007 в 11:33)   письмо автору
 
   для: Loki   (29.12.2007 в 11:15)
 

Да, скорее всего. Смутило одно обстоятельство в прошлом при подсчете онлайна именно таким образом. И скорость тогда была не ахти.
Но я бы все равно предпочел использовать таблицу в базе данных. Провести DoS (даже не DDoS) там будет труднее.

   
 
 автор: Loki   (29.12.2007 в 10:15)   письмо автору
 
   для: mihdan   (27.12.2007 в 16:28)
 

За обратный слеш в пути файла - двойка.
И нет смысла проверять все файлы подряд. Во временной директории может много всякого барахла храниться. Нас же только сессии интересуют.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования