![]() |
Помогите с сайтом
У меня такая проблема:
Есть что-то на подобие сайта. На этом сайте размещено несколько страниц. Дык вот, как сделать так, чтобы одна из страниц загружалась только одним пользователям, другим в это время должно быть предложено попробовать позже? :yees: |
На php полагаю? Если работа с БД идет, то можно просто блокировать полностью (и на чтение) таблицу, с которой работает эта страница, а при обращении проверять блокировку, и посылать ("предлагать попробовать позже").
Если без БД, то можно при обращении просто файлик определенный создавать, а в конце его удалять (ну или записывать в него что-то и читать), и по этому тое в скрипте судить используется страница в данный момент времени или нет. P.S. А зачем такое может вдруг потребоваться на сайте, если не секрет? |
В принципе не секрет, это часть дипломного проекта "Управление роботом через инет" вот и надо чтоб страница с управляющими командами загружалась тока одним пользователем.
Работа без БД, можешь описать по подробнее... :yees: |
тогда можно счетчик повесить, аля «кто на сайте», и проверять его, если кто-то есть, тогда блокировать.
|
Это то и понятно, но как это сделать? :yees:
|
когда-то писал такую штуку(довольно давно), алгоритм там прост как две копейки.
задается expired-период, т.е. время через которое человек считается покинувший сайт. при заходе на страницу: 1. каждый раз записывается время и идентификатор человека, если он где-то кликает, то время обновляется(если идентификатор уже есть). 2. удаляются expired-пользователи. т.е. чье последнее время+expired-период меньше чем время сейчас. минусы: не дает 100% гарантии что человек именно закрыл браузер. технологии: данные можно хранить в бд или в обычном файле. в качестве идентификатора может служить например: ip адрес cookie можно привлечь сюда сессии. вариантов море:) |
Цитата:
А вообще не проще ли просто каждому выдать уникальный логин/пароль и не мучаться? Тоесть заведомо разрешить доступ только одному авторизованному пользователю, тем самым исключить других!? |
Если речь идет об одной странице, то можно обойтись текстовым файлом. В любом случае прийдется возится со скриптами. Perl или PHP - решай сам.
Самый тупой способ - привязывать страницу к IP-адресу зашедшего. А лучше прописывать инфу ему в куки. |
Цитата:
может есть какой нить источник... Цитата:
|
Можно сделать так:
У нас есть файл в котором хранится некое уникальное число(зачем? сейчас расскажу :)) + дата последнего обращения к странице(timestamp). Когда человек обращается к странице происходит проверка даты последнего обращения. Если, например, разница больше заданного интервала (скажем, минута), то генерится новое случайное число, записывается в куку пришедшему + перезаписывается файл с новой датой и случайным числом. Иначе если разница меньше интервала, то читаем из куки клиента число и если оно совпадает, то обновляем дату в файле (можно ещё новое число сгенерить и послать клиенту); иначе отказываем в доступе :) На PHP делается элементарно. Смотри функции time, rand, fopen/fclose, fwrite/fread, setcookie/$_COOKIES['']. Всё доступно на http://www.php.net/ :) :beer: |
ИМХО: Hubbitus предложил вариант, котор на 100% подходит под условие - создавать файл-блокиратор пока кто-то работает со страницей. Нет смысла городить излишества с куками, базами и др
|
Ale, Хорошо, если без кук, с файлом. Как создавать этот файл блокиратор? Может есть примерчик :yees:
|
Цитата:
А теперь о таймауте - когда человек загрузил страницу - он может часами ее смотреть и больше ничего не делать, и никакой возможности на сервере узнать закрыл ли он браузер или нет не может быть и речи, поэтому, и нужно ввести этот таймаут. Скажем после 5 минут неактивности (не загружают другие страницы, не тыркают ссылки и т.д.), тоесть когда нет возможности узнать что делает юзверь - будем считать что он ушел, в таком случае другому можно разрешить зайти. И если этот все-таки действительно оказался таким тормозом, и так долго читал пассивно страницу, то теперь ему покажут что типа "занято". Однако, если это не подходит, то можно и еще один подход применить: На JS создаешь iframe в этой странице, и скажем каждые 5 секунд его обновляешь, тгда можно будет с уверенностью судить о нахождении человека на странице и необрыве соединения... |
с таймером все понятно; когда пользователь зашел на страницу с созданием файла тоже понятно, но как убить файл, когда он сваливает?
|
Если уж стали раскручиваьть этот вариант:
Цитата:
Когда пользователь заходит на страницу (при проверке timeout). Ещё можно создать ссылку на странице (типа Logout), при обращении к которой файл будет удалён принудительно. 2 All: может кому будет не лень примерчик ему написать, а то тут уже написано текста раза в три больше, чем сам скрипт займёт:) |
Цитата:
Но если кто примерчик кинет будет супер... :yees: |
Цитата:
Цитата:
PHP код:
|
При загрузке страницы скрипт выдает мне:
Цитата:
|
Цитата:
|
Вообще какие-нибудь скрипты пробовал на сервере запускать?
А то такое ощущение, что версия PHP - никакая :) (если скрипт просто в браузере открыть - это и получим). |
используется PHP4, к сожелению я не имею доступа к настройкам.
я точно не знаю, но может проблема в сервере - используется Windows XP в роли сервака, но и его я к сожалению тоже изменить не могу. Раньше примерно полгода назад, все это работало на Linuxe, а затем по техническим причинам сервак поменяли и ваще с этой Windoй не доконца понимаю как она работает... ;) |
Код:
<?php |
PHP Version 4.3.10
System Windows NT S1M0NE-OLD 5.1 build 2600 Build Date Dec 14 2004 17:46:48 Server API Apache Virtual Directory Support enabled Configuration File (php.ini) Path C:\WINDOWS\php.ini PHP API 20020918 PHP Extension 20020429 Zend Extension 20021010 Debug Build no Thread Safety enabled Registered PHP Streams php, http, ftp, compress.zlib This program makes use of the Zend Scripting Language Engine: Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies вот вроде бы все настройки |
Вроде ничего необычного (на первый взгляд). на второй тоже :) Единственное, что приходит в голову - ты из какой директории и через какой адрес вызывал "неработающий" скрипт?
Я имею ввиду, что для нормальной работы (если назвать его lock.php) его нужно поместить в папку c:/program files/apache group/apache/users/vaston/lock.php и запрашивать по адресу sziklai.obuda.kando.hu/~vaston/lock.php Каков результат? |
Наверное я совсем тормоз, я почему то не подумал, что страница должна называться lock.php, теперь пока все работает, как появится трудности сразу сообщю :yees: :yees: :yees:
|
Цитата:
|
Не подскажите как удалять файл lock когда пользоваетль покидает страницу... :yees:
|
Как убить файл разобрался unlink, а вот как сделать, чтоб по окончанию $timeout умирал файл и загружалась новая страница????
|
2 совершенно разных вопроса, однако решение одно :)
Убивать файл нет необходимости, бо скрипт все-равно при каждом запросе проверяет срок годности. Проверить здесь юзер или уже свалил можно заставив браузер отмечаться каждые N сек (напр N=$timeout) для этого напр вставить в заголовок метатег Refresh: <meta http-equiv=Refresh content=" <?php echo $timeout; ?>; URL=lock.php"> Не оч понятно что такое "управление роботом" - если вдруг обновлять страницу в этом процессе нельзя, придется это делать посредством iframe |
Если не сложно можно описать вариант с iframe, а то с refreshом не доконца получается, т.к. на странице есть еще другие кнопки (кнопки управления) и когда пользователь кликает на них, то страница обнавляется, соответственно, после обнавления, refresh работает как то не нормально... :yees:
|
Цитата:
Цитата:
Цитата:
|
Может быть он и работает правильно, тока у меня почему то происходит следующее:
Я создаю файл lock.php, где записан твой скрипт Hubbitus + вставил require ("sorry.html"); если страница занята и require ("indexb.html"); если доступ разрешен, затем при загрузке страницы "indexb.html" все работает, т.е. загружаешь с другого косма, говорят страница занята, но потом если на первом компе выйти и еще раз зайти, то автоматически доступ разрешается всем. Может я что-то в скрипте не понимаю, можешь объяснить: $time[10]+$timeout а точнее мне не понятно $time[10] А вообще как я разобрался, если этот файл на серваке существует, то доступ почему то имеют все, поэтому я решил его убивать... |
Цитата:
Цитата:
Цитата:
Ну а теперь объяснение этого собчтвенно: в переменной $time, функцией stat получается массив параметров файла блокировки, к которому я и обращаюсь для получения времени его последнего изменения, собственно 9 элемент! |
да, так намного лучше.
Но теперь другая проблема, например, устанавливаю я timeout=180, что соответсвует 3 мин. Если пользователь находится на странице дольше чем 3 мин, то его со страницы не выбрасывает, а другим пользователям доступ открывается. Я пробовл использовать JavaScript, т.е. счетчик находждения на странице, равный также 3 мин, но так как у меня на странице есть другие кнопки, которые перезагружают эту же страницу то это не работает, т.е. каждый раз по нажатию на кнопку счетчик запускается заново, таким образом пользоваетль в принципе не имеет ограничения. Может кто-нибудь помочь мне в этом. |
Цитата:
Цитата:
Короче, насколько я понял, это будет нескончаемо длиться, пока не напишет кто-то готового решения: Файл lock.php: PHP код:
PHP код:
И последнее, в догонку: Если вдруг на сервере нету комманды touch, или вдруг вообще нельзя выполнять комманды, то вместо этого можно просто перезаписать файл тем же самым содержимым. |
Все теперь все нормально... :yees:
Но теперь я еще хочу сделать так чтоб в статус баре (или же на странице) был таймер, например, 3 мин. Проблема в том, что на странице, как я уже писал раньше есть кнопки "управления" и по нажатию на одну из этих кнопок, вызывается скрипт php, обрабатывается и возвращается на эту же страницу. Дак вот, как сделать так чтоб время таймера не заново начинало идти а продолжало... Конечно если это вообще возможно, то подскажите плизз :yees: |
Цитата:
|
Таймар должен быть такой: По истечению этого времени пользователь должен быть отправлен на HomePage.
Как сохранять метки между загрузками страниц? |
Цитата:
Как вариант, можно все управление запихнуть в iframe (или просто фреймовую структуру сделать) и не перезагружать просто основную страницу, на которой будет тикать таймер. |
Хотелось бы использовать такой тиg счетчика, как его можно безболезнено изменить, чтоб записывались cookie, правильно ли я записал? И мне не понятно как читать куки, может подскажешь как и каду вставить?
Код HTML:
<body background='picture\fon.jpeg' onLoad="begintimer()" onunload="setcook()">Есть страницы index.html, в ней расположен iframe, который ссылается на ту же frash.php, где мы и записали наш счетчик, НО когда юзер кликает на кнопку то перегружается страница index.html и с ней соответсвенно и счетчик.. Может я конечно что-то не так делаю.. Hubbitus если тебе не сложно то модет набросаешь скриптик, у тебя это уж больно хорошо получается...Я пока плохо это умею и не все понимаю.. |
| Часовой пояс GMT +4, время: 15:44. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.