imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 18.04.2005, 10:37     # 1
Vaston
Guest
 
Сообщения: n/a

Помогите с сайтом

У меня такая проблема:
Есть что-то на подобие сайта. На этом сайте размещено несколько страниц. Дык вот, как сделать так, чтобы одна из страниц загружалась только одним пользователям, другим в это время должно быть предложено попробовать позже?
 
Старый 18.04.2005, 10:42     # 2
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
На php полагаю? Если работа с БД идет, то можно просто блокировать полностью (и на чтение) таблицу, с которой работает эта страница, а при обращении проверять блокировку, и посылать ("предлагать попробовать позже").
Если без БД, то можно при обращении просто файлик определенный создавать, а в конце его удалять (ну или записывать в него что-то и читать), и по этому тое в скрипте судить используется страница в данный момент времени или нет.

P.S. А зачем такое может вдруг потребоваться на сайте, если не секрет?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 19.04.2005, 15:52     # 3
Vaston
Guest
 
Сообщения: n/a

В принципе не секрет, это часть дипломного проекта "Управление роботом через инет" вот и надо чтоб страница с управляющими командами загружалась тока одним пользователем.
Работа без БД, можешь описать по подробнее...
 
Старый 19.04.2005, 16:27     # 4
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
тогда можно счетчик повесить, аля «кто на сайте», и проверять его, если кто-то есть, тогда блокировать.
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 19.04.2005, 16:32     # 5
Vaston
Guest
 
Сообщения: n/a

Это то и понятно, но как это сделать?
 
Старый 19.04.2005, 16:49     # 6
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
когда-то писал такую штуку(довольно давно), алгоритм там прост как две копейки.

задается expired-период, т.е. время через которое человек считается покинувший сайт.

при заходе на страницу:

1. каждый раз записывается время и идентификатор человека, если он где-то кликает, то время обновляется(если идентификатор уже есть).
2. удаляются expired-пользователи. т.е. чье последнее время+expired-период меньше чем время сейчас.

минусы:
не дает 100% гарантии что человек именно закрыл браузер.

технологии:
данные можно хранить в бд или в обычном файле.
в качестве идентификатора может служить например:
ip адрес
cookie

можно привлечь сюда сессии.

вариантов море
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 19.04.2005, 21:49     # 7
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Vaston:
Это то и понятно, но как это сделать? :Ezo!:
Ну вобщем я кратко и описал как это делается выше...

А вообще не проще ли просто каждому выдать уникальный логин/пароль и не мучаться? Тоесть заведомо разрешить доступ только одному авторизованному пользователю, тем самым исключить других!?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 20.04.2005, 01:37     # 8
Goryn
::VIP::
 
Аватар для Goryn
 
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633

Goryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собойGoryn Имеются все основания чтобы гордиться собой
Если речь идет об одной странице, то можно обойтись текстовым файлом. В любом случае прийдется возится со скриптами. Perl или PHP - решай сам.

Самый тупой способ - привязывать страницу к IP-адресу зашедшего. А лучше прописывать инфу ему в куки.
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы!
Goryn вне форума  
Старый 20.04.2005, 15:41     # 9
Vaston509
Junior Member
 
Аватар для Vaston509
 
Регистрация: 20.04.2005
Сообщения: 95

Vaston509 Путь к славе только начался
Цитата:
Goryn:
А лучше прописывать инфу ему в куки.
А как это сделать можно?
может есть какой нить источник...

Цитата:
Hubbitus:
А вообще не проще ли просто каждому выдать уникальный логин/пароль и не мучаться? Тоесть заведомо разрешить доступ только одному авторизованному пользователю, тем самым исключить других!?
Сначала я пробовал с регистрацией и авторизацией, но сейчас надо просто по другому, ограничить тока одну страницу
Vaston509 вне форума  
Старый 20.04.2005, 18:40     # 10
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Можно сделать так:
У нас есть файл в котором хранится некое уникальное число(зачем? сейчас расскажу ) + дата последнего обращения к странице(timestamp).
Когда человек обращается к странице происходит проверка даты последнего обращения.
Если, например, разница больше заданного интервала (скажем, минута), то генерится новое случайное число, записывается в куку пришедшему + перезаписывается файл с новой датой и случайным числом.
Иначе если разница меньше интервала, то читаем из куки клиента число и если оно совпадает, то обновляем дату в файле (можно ещё новое число сгенерить и послать клиенту); иначе отказываем в доступе
На PHP делается элементарно. Смотри функции time, rand, fopen/fclose, fwrite/fread, setcookie/$_COOKIES['']. Всё доступно на http://www.php.net/
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 21.04.2005, 01:35     # 11
Ale
Junior Member
 
Регистрация: 22.03.2004
Сообщения: 123

Ale Известность не заставит себя ждатьAle Известность не заставит себя ждать
ИМХО: Hubbitus предложил вариант, котор на 100% подходит под условие - создавать файл-блокиратор пока кто-то работает со страницей. Нет смысла городить излишества с куками, базами и др

Последний раз редактировалось Ale; 21.04.2005 в 01:37.
Ale вне форума  
Старый 22.04.2005, 09:53     # 12
Vaston509
Junior Member
 
Аватар для Vaston509
 
Регистрация: 20.04.2005
Сообщения: 95

Vaston509 Путь к славе только начался
Ale, Хорошо, если без кук, с файлом. Как создавать этот файл блокиратор? Может есть примерчик
Vaston509 вне форума  
Старый 23.04.2005, 21:26     # 13
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Vaston509:
Ale, Хорошо, если без кук, с файлом. Как создавать этот файл блокиратор? Может есть примерчик :Ezo!:
Примера нету, но чего там и примерить-то? А алгоритм прост как 2 копейки: при заходе на страницу, проверяешь, есть ли определенный файл, если есть (или если дата создания его больше определенного тобой таймаута, об этом чуть ниже) - посылаешь. Если нету - создаешь. Соответственно когда создал, остальные будут посылаться пока он есть. Когда человек выходит с этой страницы - удаляешь этот контрольный файл.
А теперь о таймауте - когда человек загрузил страницу - он может часами ее смотреть и больше ничего не делать, и никакой возможности на сервере узнать закрыл ли он браузер или нет не может быть и речи, поэтому, и нужно ввести этот таймаут. Скажем после 5 минут неактивности (не загружают другие страницы, не тыркают ссылки и т.д.), тоесть когда нет возможности узнать что делает юзверь - будем считать что он ушел, в таком случае другому можно разрешить зайти. И если этот все-таки действительно оказался таким тормозом, и так долго читал пассивно страницу, то теперь ему покажут что типа "занято".
Однако, если это не подходит, то можно и еще один подход применить: На JS создаешь iframe в этой странице, и скажем каждые 5 секунд его обновляешь, тгда можно будет с уверенностью судить о нахождении человека на странице и необрыве соединения...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 24.04.2005, 13:27     # 14
Vaston509
Junior Member
 
Аватар для Vaston509
 
Регистрация: 20.04.2005
Сообщения: 95

Vaston509 Путь к славе только начался
с таймером все понятно; когда пользователь зашел на страницу с созданием файла тоже понятно, но как убить файл, когда он сваливает?
Vaston509 вне форума  
Старый 24.04.2005, 15:06     # 15
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Если уж стали раскручиваьть этот вариант:
Цитата:
Vatson509:
как убить файл, когда он сваливает?
Давай попробуем ещё раз
Когда пользователь заходит на страницу (при проверке timeout). Ещё можно создать ссылку на странице (типа Logout), при обращении к которой файл будет удалён принудительно.
2 All: может кому будет не лень примерчик ему написать, а то тут уже написано текста раза в три больше, чем сам скрипт займёт
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию

Последний раз редактировалось Al-x; 24.04.2005 в 15:08. Причина: и нафига я на кнопку транслита нажал :)
Al-x вне форума  
Старый 24.04.2005, 19:31     # 16
Vaston509
Junior Member
 
Аватар для Vaston509
 
Регистрация: 20.04.2005
Сообщения: 95

Vaston509 Путь к славе только начался
Цитата:
Al-x:
Давай попробуем ещё раз
Когда пользователь заходит на страницу (при проверке timeout). Ещё можно создать ссылку на странице (типа Logout), при обращении к которой файл будет удалён принудительно
Все равно не понятно
Но если кто примерчик кинет будет супер...
Vaston509 вне форума  
Старый 24.04.2005, 21:43     # 17
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Vaston509:
Все равно не понятно :Frown:
Прискорбно.

Цитата:
Vaston509:
Но если кто примерчик кинет будет супер... :Ezo!:
Лови:
PHP код:
<?
session_start();
$timeout = '10'; //Таймаут в секундах

$time = @stat('lock');

    if ($time[9]+$timeout > date('U') and is_file('lock') and file_get_contents('lock')!=session_id()){
    echo 'Извините, страница уже используется';
    }
    else{
    $ff = fopen('lock', 'w');
    fwrite($ff, session_id());
    fclose($ff);
    echo 'Доступ разрешен, страница свободна';
    }
?>
Надеюсь там все понятно, благо все элементарно...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 25.04.2005, 10:05     # 18
Vaston509
Junior Member
 
Аватар для Vaston509
 
Регистрация: 20.04.2005
Сообщения: 95

Vaston509 Путь к славе только начался
При загрузке страницы скрипт выдает мне:
Цитата:
Hubbitus:
date('U') and is_file('lock') and file_get_contents('lock')!=session_id()){ echo 'Èçâèíèòå, ñòğàíèöà óæå èñïîëüçóåòñÿ'; } else{ $ff = fopen('lock', 'w'); fwrite($ff, session_id()); fclose($ff); echo 'Äîñòóï ğàçğåøåí, ñòğàíèöà ñâîáîäíà'; }?>
сам не понимаю в чем ошибка...
Vaston509 вне форума  
Старый 25.04.2005, 20:27     # 19
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

Hubbitus Бог с наворотамиHubbitus Бог с наворотами
Hubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотамиHubbitus Бог с наворотами
Цитата:
Vaston509:
При загрузке страницы скрипт выдает мне:...
Он такого кода ну никак не может выдать - моего ника в скрипте уж точно нету. Да и вообще странно это все. Попробуй заменить на длинную форму PHP-тег ("<?" на "<?php"), попробуй file_get_contents заменить на fopen, fread, fclose, если версия PHP у тебя старая очень... кстати, какая версия? Посмотри настройки связанные с сесиями у себя...
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям!

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 25.04.2005, 22:21     # 20
Al-x
Junior Member
 
Регистрация: 30.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Вообще какие-нибудь скрипты пробовал на сервере запускать?
А то такое ощущение, что версия PHP - никакая (если скрипт просто в браузере открыть - это и получим).
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:59.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.