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

Форум MySQL

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

 

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

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

тема: Mysql и Online
 
 автор: Skyonex_   (22.08.2006 в 23:51)   письмо автору
 
 

Помогите плиз решить проблему на которую уже убил кучу времени. Есть сайт и авторизация (на сессиях). Должен быть подсчет пользователей онлайн. Все бы хорошо, но подсчет кол-ва увы не радует (
Делаю следущее:

Вход пользователя в систему:

$query="select count(*) from wsl_online_users where user_id=$user_id";

if($this->mydb->GetSqlResult(0)>0)
{
$this->mydb->Query("delete from wsl_online_users where user_id=$user_id");
}

$query="insert into wsl_online_users(session_key,session_expire,user_id) values('$sid',NOW(),$user_id)";

Обновляем статус online для пользователя:

$this->mydb->Query("update wsl_users set online=1 where id=$user_id");

Запись сессии:

function Write($key,$val)
{
$key=addslashes($key);
$val=addslashes($val);

$query="select count(*) from wsl_sessions where session_key='$key'";
$this->mydb->Query($query);

if($this->mydb->GetSqlResult(0)==0)
{
$query="insert into wsl_sessions(session_key,session_expire,session_value) ";
$query.="values('$key',NOW(),'$val')";
$this->mydb->Query($query);
}
else
{
$query="update wsl_sessions set session_value='$val',session_expire=NOW() where session_key='$key'";
$this->mydb->Query($query);
}

$query="select count(*) from wsl_online_users where session_key='$key'";
$this->mydb->Query($query);

if($this->mydb->GetSqlResult(0)>0)
{
$query="update wsl_online_users set session_expire=NOW() where session_key='$key'";
$this->mydb->Query($query);
}

return true;
}

Раз в 10 минут собираем мусор:

function GC($maxlifetime)
{
$query="delete from wsl_sessions where session_expire<NOW() - INTERVAL '10' MINUTE";
$this->mydb->Query($query);

$query="select user_id from wsl_online_users where session_expire<NOW() - INTERVAL '10' MINUTE";
$this->mydb->Query($query);

while($row=$this->mydb->FetchArray())
{
if(($id=$row[0])!=0)
{
$query="update wsl_users set lastvisit=NOW(),online=0 where id=$id";
$this->mydb->Query($query);
}
}

$query="delete from wsl_online_users where session_expire<NOW() - INTERVAL '10' MINUTE";
$this->mydb->Query($query);

return true;
}

В сборке мусора есть код по которому назначаем статус оффлайна для пользователя:

while($row=$this->mydb->FetchArray())
{
if(($id=$row[0])!=0)
{
$query="update wsl_users set lastvisit=NOW(),online=0 where id=$id";
$this->mydb->Query($query);
}
}

В общем проблема в том, что в wsl_online_users при входе просто не записываются строки. Точнее не всегда записываются. В итоге я не могу отследить переход в оффлайн при сборке мусора и как результат у меня появляются вечные онлайнщики.
Либо в этих строках:

while($row=$this->mydb->FetchArray())
{
if(($id=$row[0])!=0)
{
$query="update wsl_users set lastvisit=NOW(),online=0 where id=$id";
$this->mydb->Query($query);
}
}
Не обновляется таблица wsl_users и такое важное для меня поле ONLINE ((((

ps Если понадобится доп. код или объяснения, напишу.

   
 
 автор: Skyonex_   (23.08.2006 в 00:03)   письмо автору
 
   для: Skyonex_   (22.08.2006 в 23:51)
 

Да. Вот здесь переписал с ошибкой. Надо в отдельную функцию вынести:
function (время,;id)
{
$query="update wsl_users set lastvisit=время,online=0 where id=$id";
$this->mydb->Query($query);
}

while($row=$this->mydb->FetchArray())
{
if(($id=$row[0])!=0)
{
Функция(время,id)
}
}

Но все равно приглючивает (

   
 
 автор: Skyonex_   (23.08.2006 в 15:31)   письмо автору
 
   для: Skyonex_   (23.08.2006 в 00:03)
 

Ну что же. Вижу на это мне никто и ничего не ответит. Тогда прошу, подскажите плиз реальный пример авторизации и подсчета кол-ва онлайн зарегистрированных пользователей на базе сессий и mysql.

ps Пример с этого сайта видел. Все что было можно применил. Не то.

   
 
 автор: cheops   (23.08.2006 в 16:40)   письмо автору
 
   для: Skyonex_   (23.08.2006 в 15:31)
 

Пример вы какой имеете ввиду? Эти:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8481
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=80

   
Rambler's Top100
вверх

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