• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Кто сейчас на сайте

  • Автор темы Kauperwood
  • Дата начала
K

Kauperwood

Недавно лазил в поисках чего то интересного на мой взгяд и наткнулся на простенький счетчик онлайна посетителей на сайте.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">who_online.php</div></div><div class="sp-body"><div class="sp-content">
PHP:
<?php
session_save_path("");
session_start(); 

function getUsersOnline() { 
$count = 0; 

$handle = opendir(session_save_path()); 
if ($handle == false) return -1; 

while (($file = readdir($handle)) != false) { 
if (ereg("^sess", $file)) $count++; 
} 
closedir($handle); 

return $count; 
} 
?>
Выложил его, - да он показывает когда кто то на сайте, но вот не могу понять почему он не сбрасывает счетчик, когда кто то покидает сайт, цифра может только увеличиваться.. в чем тут проблема?
 
1

1ive

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

Такой, думаю, пойдет лучше:

PHP:
session_id("codeby.net"); 
session_start(); 
$time=5; 
$f=1; 
if(!isset($_SESSION['usession']))  
$_SESSION['usession']=0; 
if($_SESSION['usession']>0) 
{ 
for($i=0;$i<$_SESSION['usession'];$i++) 
if($_SESSION['user']['ip'][$i]==$_SERVER['REMOTE_ADDR']) 
{ 
$_SESSION['user']['date'][$i]=date('U'); 
$f=0; 
break; 
} 
if($_SESSION['usession']>0)		
for($i=0;$i<$_SESSION['usession'];$i++) 
if(date('U')-$_SESSION['user']['date'][$i]>$time) 
{ for($j=$i;$j<$_SESSION['usession']-1;$j++) 
{ 
$_SESSION['user']['date'][$j]=$_SESSION['user']['date'][$j+1]; 
$_SESSION['user']['ip'][$j]=$_SESSION['user']['ip'][$j+1]; 
} 
$_SESSION['usession']--; 
} 
} 
if($f) 
{ 
$_SESSION['user']['ip'][$_SESSION['usession']]=$_SERVER['REMOTE_ADDR']; 
$_SESSION['user']['date'][$_SESSION['usession']]=date('U'); 
$_SESSION['usession']++; 
} 
echo "На сайте: ".$_SESSION['usession']."пользователей!";
 
K

Kauperwood

Это скорее счетчик посещений.
Не могу сам понять, непонятно, на том сайте написано что именно онлайн на сайте, вот .
За Ваш вариант спасибо - вроде то, но я какой то не фартовый на счетчики, или в одну и ту же ситуацию попадаю, не ясно... С Вашим примером у меня выводиться сугубо единица. Может на хостинге в пхп что то включить нужно?

добавлено позднее: Бедные друзья, приходиться им заходить теперь ко мне сайт чаще :facepalm: Надо будет почитать потом про то как виртуально организовать подобные опыты.
 
1

1ive

Вот код рабочий 100%))

PHP:
session_save_path("sessions");
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()- filemtime(session_save_path() . '/' . $file) < MAX_IDLE_TIME * 60) { 
$count++; 
} 
} }
closedir($directory_handle); 
return $count; 
} else {return false;} 
}
echo 'Online: ' . getOnlineUsers() . '<br />';

В каталоге с файлом нужно будет создать папку "sessions" для хранения сессий.
Пример:

__________2.png
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!