Цитата:
Vaston509:
да, так намного лучше.
|
Как "так"? Правильно скопировав пример???
Цитата:
Vaston509:
Но теперь другая проблема, например, устанавливаю я timeout=180, что соответсвует 3 мин.
Если пользователь находится на странице дольше чем 3 мин, то его со страницы не выбрасывает, а другим пользователям доступ открывается.
|
А об этом я уже говорил - когда пользователь загрузил страницу и пялится на нее 2 часа, ничего не делая, естественно нет возможности на сервере узнать что он делает, и не ушел ли вообще!!! Для этого и предложено было решение с обновлением iframe.
Короче, насколько я понял, это будет нескончаемо длиться, пока не напишет кто-то готового решения:
Файл lock.php:
PHP код:
<?
session_start();
$timeout = '10'; //Таймаут в секундах
$time = @stat('lock');
if ( (is_file('lock') and file_get_contents('lock')==session_id()) or $time[9]+$timeout < date('U')){
$ff = fopen('lock', 'w'); //В любом случае
fwrite($ff, session_id()); //перезаписываем
fclose($ff); //для обновления даты
echo 'Доступ разрешен, страница свободна';
echo '<iframe src=fresh.php></iframe>';//Будем поддерживать соединение
}
else{
echo 'Извините, страница уже используется';
}
?>
Файл fresh.php:
PHP код:
<meta http-equiv=Refresh content="8; URL=fresh.php">
<?
exec('touch lock');
?>
Все проверено, все работает, ничего менять больше не нужно в логике. Естественно можно поменять таймауты и оформление фрейма (думаю его стоит скрыть вообще). Да, таймаут обновления фрейма лучше ставить 80-90% от того что в файле lock.php.
И последнее, в догонку: Если вдруг на сервере нету комманды touch, или вдруг вообще нельзя выполнять комманды, то вместо этого можно просто перезаписать файл тем же самым содержимым.