|
|
|
| Пишу скрипт авторизации, уже почти всё написал, но вот возникла проблема.
При входе не проверяется находится ли этот пользователь online или он только зашёл. То получается что одновременно на сайте могут быть несколько пользователей залогининых как один!
Весь механизм авторизации строится в основном на сессиях. В начале я хотел заносить всех залогининых юзеров заносить в таблицу online. Но если пользователь отрубится не нажимая кнопку выход (у меня есть такая кнопкаб она уничтожает сессию...) то он остаётся в таблице online и в следующий раз он не может залогинится. Подскажите, как мне решить эту проблему? | |
|
|
|
|
|
|
|
для: Bronepoz[)
(11.07.2005 в 09:58)
| | > Подскажите, как мне решить эту проблему?
При отсутствии активности со стороны пользователя в течении определенного времени убивать сессию и очищать таблицу online. Проверять время последнего запроса КАЖДОГО из пользователей при КАЖДОМ запуске скрипта (если нет crontab'а), и, в случае, если найдены неактивные пользователи - проделывать вышеуказанную операцию. | |
|
|
|
|
|
|
|
для: JC_Piligrim
(11.07.2005 в 10:37)
| | Я не совсем понял. Как проверять активен он или нет, вернее как проверить время последнего запроса? | |
|
|
|
|
|
|
|
для: Bronepoz[)
(11.07.2005 в 12:43)
| | Для этого, при каждом обращении посетителя к страницам Web-приложения необходимо сохранять дату его обращения. Если с момента последнего обращения проходит больше 20 минут (ну или 10) - пользователь ушёл с Web-сайта и его можно удалять из списка On-line. | |
|
|
|
|
|
|
|
для: cheops
(11.07.2005 в 12:46)
| | Так вот как сделать? Написать функцию которая получает текушую дату и сравнивает её с датой последнего запроса пользователя, и распихать эту фукцию по всем скриптам? Или есть другой вариант? | |
|
|
|
|
|
|
|
для: Bronepoz[)
(11.07.2005 в 12:53)
| | У вас как-то регистрируется обращение посетителя к конкретной странице? Наверняка это сделано при помощи функции - можно модифицировать эту функцию, чтобы она за одно и производила сравнение. | |
|
|
|
|
|
|
|
для: cheops
(11.07.2005 в 13:18)
| | файл онлайн юзеров:
Вася 1119604412
Мася 1119604412
|
<?php
session_start();
$period = 60*5;
$upd=false;
$users = file($on_lines);
foreach($users as $line){
if($line!="\n"){
$user = explode(" ", $line);
if(($_SESSION['login']==$user[0])&&(($server_time - $user[1]) < $period)){$upd=true;
$user[1] = $server_time;//обновляем время если онлайн в силе
$line = implode(" ",$user);
}
unset($user);
$buffer .= $line;
}
}
if($upd){$fd = fopen($on_lines,"w");
fputs($fd,$buffer);
fclose($fd);}
?>
|
PS:для оффлайн примерно таким же макаром,тока
удалять из списка юзера.
PSS: cheops научил =) | |
|
|
|
|
|
|
|
для: Bronepoz[)
(11.07.2005 в 09:58)
| | А ты убей все сессии, где есть такой логин, перед регистрацией новой сессии (входом). | |
|
|
|