![]() |
Запрет на "возвращение" назад
Появился вопрос, который пока так и не смог решить в полной мере. Делал систему проверки знаний и появилась потребность запретить пользователю возвращаться назад. Как один из вариантов можно конечно использовать обработчик:
Код:
onclick="location.replace('test.html');">meet Billy</a> Можно конечно (или нет?) сделать так чтобы страницы открывались каждый раз в новых окнах. При этом история будет удаляться. Можно конечно открывать весь мой сайт в окошке безо всяких панелей, использую JavaScript. Жду ваших идей по этому поводу. И если не трудно, то напишите полный синтаксис команды JavaScript для открытия страниц в новом окне. Заранее спасибо |
mrak1990 <body onload=".....">?
|
Sham
Цитата:
Но я вчера и сам нашёл решение, оказавшееся очень простым. Превым делом я добавил во все создаваемые страницы код Код:
header ("Cache-Control: no-cache"); Потом вставил обычный счётчик посещений. А вкаждой генерируемой странице у меня висит переменная $nomer содержащая номер текущего вопроса. Потом просто при каждой генерации я проверяю, равны ли эти две переменный (кол-во посещений и переменная $nomer). Единственная что, пока всё это только в моей голове. Но посмотрим, что из всего этого получится. |
Не совсем удалась описанная выше операция. Проблема в том, что если запрещеть браузеру кэшировать страницу и если на этой странице есть форма, то работать нифига не будет кнопка назад (браузер пишет, что "Невозможно отобразить страницу"). Если форму убрать, то нормально срабатывает запрет на кеширование и страница обновляется. Если кто знает, то подскажите, что это за такая интересная особенность и как сней бороться
|
Это они все так "странно" и закономерно себя ведут: форма - это возможность посетителя менять поведение страницы (по сути). Пусть есть три страницы: 1 - с формой, 2 - результат обработки формы сервером, 3 - там где мы сейчас есть. Если пытаться back с 3 на 2, то будет ошибка аля страница устарела (она, и верно, динамическая). Толи лениво было разрабам запоминать просто код принятый с сервера, толи я не все спеки прочел и чего-то не понимаю. Кстати, попробуйте использовать в формах метод GET, может быть это решит текущую проблему. А вообще, я бы использовал AJAX (см. прикрепленную тему) - модно, дешево и сердито.
|
mrak1990 я бы насчет кэширования и париться не стал :). Поведение браузеров здесь не стандартизировано (более того - подлежит настройке юзером), да и в большинстве случаев назад можно перейти в автономном режиме. Так шо - либо javascript (в т.ч. АЯХ), либо другой алгоритм (проверки на чаво-й-то-там)...
|
Почему бы после нажатия "Перейти к следующему вопросу" не записать ответ в сессию, куки, либо в базу данных / текстовый файл. А потом проверять: был ответ - новый не записываем, не было - записываем.
|
Coutty
Цитата:
Prisoner Цитата:
Насчёт AJAX подумаю. Вообще все эти проблемы возникли из-за того что особо умные сдающие тест любят щёлкать кнопку назад. Пока единственнон решение - запускать тест в окне безо всяких тулбаров, панелей, но меня не устраивает то, что нельзя развернуть его на полный экран. |
mrak1990
Лучше наверно в сессии хранить, а не в Сookie Раз вы храните все данные, так в чём проблема? Если отвечается уже отвеченный вопрос, тогда ответ не принимается и сообщение "На этот вопрос Вы уже ответили" - и Пусть они себе шёлкают назад сколько влезит - только время теряют. |
mrak1990, есть сайт fepo.ru, где проводят интернет-экзамен (у нас проводили). Там окошко без тулбара разворачивается на весь экран, но назад всегда можно вернуться по бэкспэйсу.
Кроме того, если сразу показывать - правильный был ответ или нет, возможна групповая поддержка типа "а ты как ответил?" - "А вот так" - "И я так же отвечу". ИМХО лучше в конце теста всё сразу показать. Но остаётся ещё проблема, что можно открыть новое окно с гуглом и, при наличии достаточного времени, поискать ответ там. Дальше: а если этот hidden подменить? Было 10 правильных - стало 30. Модификация кода страницы (если не проверяется сервер, откуда идёт запрос) или что-нибудь типа ArtMoney с заменой значений в памяти (хотя насчёт этого я не уверен...). |
Coutty
Цитата:
Насчёт Artmoney не думаю, что такое возможно. Ведь открытые страницы хранятся во временной папке. Я пробовал как-то изменить этот код - помойму ничего не произошло. Хотя я может быть и путаю. Цитата:
vadimiron Цитата:
|
Цитата:
Как ещё можно попробовать: В основной html вставить ссылку на ява-скрипт с содержанием Код:
document.write (" bla-bla-bla "); Я не могу сказать точно, но вроде как у меня такое не кэшировалось. Попробуй. |
Coutty
Цитата:
Цитата:
В принципе должно прокатить. Только один вопрос. Можно ли этим способом вставлять строки в уже написаную страницу? Например идет вывод всякой фигни через echo потом document.write |
Цитата:
Т.е. такая последовательность (?): Вызов скрипта php, который сгенерирует html-обложку (head, title и прочее). В нём создать строку... Код:
<script language="javascript" src="scriptgen.php?number=10"> Соответственно, клиент, получив html, отправляет запрос на генерацию js, в котором уже будет основное содержимое. В итоге у клиента будет собранная незакэшированная (незакэшированная ли?) страница. Чтобы получить новую страницу нужно будет опять отправлять запрос на создание html. Таким образом, два скрипта: 1. Условно назовём htmlgen.php. Генерирует обложку, следит за изменением номера вопроса и обрабатывает ответ, полученный из формы. 2. scriptgen.php. Создаёт js с использованием запросов к базе данных или чего-там-ещё на основе числа из $_GET['number']. Обработкой результатов не занимается. |
|
Цитата:
|
Будем думать. Долго, но упорно. Как всегда...
|
Цитата:
Для примера (этот код содержится в странице с названием 4.php): Код:
<?php Так скрипт работает только в том случае, если отключить передачу SID через COOKIE. Пробовал и другие комбинации параметров из php.ini, но ничего толкового не получилась. |
Coutty
Цитата:
|
Чего-то все молчат. Видно слишком глупые вопросы задаю. Ну на этот вопрос я думаю вы ответите. Можно ли последством JS или ка-то по другому удалять адреса из history?
|
Имхо, это невозможно.
|
Цитата:
|
скаких это пор историю js уничтожать нельзя?:)
|
Если не сложно, FADE, то код в студию.
|
нельзя это (если только пользователь не разрешит вручную)
http://forum.oszone.net/thread-65756...tml#post438643 |
Такой вот дополнительный вопрос: а к примеру с помощью какого-нибудь VB можно это реализовать? В этой теме я очень туг. Так что просветите меня хоть немножко.
|
Время: 13:23. |
Время: 13:23.
© OSzone.net 2001-