|
|
|
|
|
|
для: Skyonex_
(23.08.2006 в 00:03)
| | Ну что же. Вижу на это мне никто и ничего не ответит. Тогда прошу, подскажите плиз реальный пример авторизации и подсчета кол-ва онлайн зарегистрированных пользователей на базе сессий и mysql.
ps Пример с этого сайта видел. Все что было можно применил. Не то. | |
|
|
|
|
|
|
|
для: 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)
}
}
Но все равно приглючивает ( | |
|
|
|
|
|
|
| Помогите плиз решить проблему на которую уже убил кучу времени. Есть сайт и авторизация (на сессиях). Должен быть подсчет пользователей онлайн. Все бы хорошо, но подсчет кол-ва увы не радует (
Делаю следущее:
Вход пользователя в систему:
$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 Если понадобится доп. код или объяснения, напишу. | |
|
|
|
|