![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Nex |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.5.2007 Где: Украина, Харьков Репутация: нет Всего: нет |
Делаю опросник, логика работы - из базы вытаскивается текст вопроса и тип, создается нужный контрол (textarea, radiobuttongroup, пр...), пользователь отвечает на вопрос, нажимает кнопку "далее", на onClick его ответ сохраняется в базу и вытаскивается следующий вопрос. Все работает, но если человек ответит на вопрос, нажмет "Далее", ему отрисуется второй вопрос, а он нажмет у себя в браузере на конопочку "Назад", и еще раз ответит на первый вопрос, то я у себя на сервере все-равно вижу контролы, сгенерированные для второго вопроса - ID вопроса и прочее. Т.е. получается что человек вроде как ответил на 2й вопрос, нажав на кнопку "Далее" на странице первого. Вообщем-то получается что контролы берутся не из сгенерированного хтмл'а, а хранятся на сервере (как бы в сессии) - по крайней мере частично? Существуют ли какие-то стандартные методы защиты от такой ситуации, т.к. она, по-моему, должна быть довольно таки распространенной?..
|
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 2 Всего: 5 |
||||
|
||||
Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
А что ты используешь для отрисовки всех этих контролов и нажатия на кнопки "Далее". Wizard ???
Добавлено через 9 минут и 28 секунд Народ, я глючу или как. Вообще JavaScript History возвращает браузер на предыдущий URL отличный от данного URL. Правильно ??? Следовательно, если у нас разные URL адреса, то можно сделать вывод, что и событие хочешь ты того или нет, но события будут разные, ну и страницы тоже разные, ведь URL страниц разные. Следовательно возникает следующий вопрос к топик стартеру -- А как ты генерируешь вопросы, что ты и где хранишь ??? -------------------- |
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 4 Всего: 8 |
Может имеет смысл запретить кеширование страницы?
Это сообщение отредактировал(а) Mymik - 7.5.2007, 22:44 |
|||
|
||||
Nex |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.5.2007 Где: Украина, Харьков Репутация: нет Всего: нет |
Pankon, dazy, это все-равно проблему не решит. Человек может просто сохранить страницу к себе на комп и пр.
Mymik, визард не использую, URL остается тем же. У меня страница генерируется полностью динмаически, я получаю следующий вопрос, в зависимости от его типа создаю нужный контрол. В контроле хранится ID вопроса. Страница всегда test.aspx без всяких параметров. По onClick на кнопке "Ответить" я беру из контрола ID вопроса и текст ответа. Т.е. если бы при возврате "Назад" я бы получал ID старого вопроса меня бы все устраивало, а сейчас получается что ID вопроса новый, а отвечает человек еще раз на старый вопрос... |
|||
|
||||
Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
Nex, а как он тогда нажимает назад ??? я просто не понимаю механизма попадания на предыдущий вопрос... Возможно поможет такая штука как Response.Redirect страницы саму на себя. Тогда по нажатию F5 или Ctrl+R на сервере не сработает предыдущие событие. Возможно тебе это как раз и нужно...
Если это не то, то расскажи что за кнопка "назад" ??? Если это кнопка браузера, AFAIK так это ж опять таки возврат на страницу с URL отличным от данной страницы. А можешь привести пример кода (выципи строчки) Где ты генерируешь контролы. Т.е. как ты их генерируешь... может быть собака зарыта там. И желательно где ты хранишь данные из СУБД. Как ты определяешь последующий вопрос ??? -------------------- |
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 4 Всего: 8 |
Как я понял у Nex'а, в любом случае будет один и тот же URL. Я так понимаю у вас не сами конролы в сеесии хранятся, а их описание, ну там ИД вопроса, текст, тип.... Попробуйте сохранять основыне данные так же и во ViewState. А при клике на кнопке в самом начале обработки восстанавливать эти данные в session (или сверять их, и если не совпало, то в базу не писать). |
|||
|
||||
Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
Если они хранятся где-то в Сессии, то лучше даже не в сессии их хранить, а в CommandArgument кнопки и запрашивать их значение из этого параметра кнопки.
-------------------- |
|||
|
||||
kedicik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 12.4.2007 Репутация: нет Всего: нет |
Я делаю так. В динамическом контроле есть поле невидимое для тестируемого. Оно содержит идентификатор вопроса из БД. Каждый раз при загрузке динамического контрола оно соответстует данному вопросу. В динамическом контроле я вывожу ответы для данного вопроса. в зависимости от типа вопроса эти контролы разные соответственно. Поэтому если нажать на кнопку Назад из броузера то идент. вопроса считается из этого поля. И никаих заморочек не будет. Я сама делала в точности такой вопросник. И эта кнопка меня напрягала. Но особенно когда я даю возможность посмотреть результат тестируемому а он опять по этой кнопке хочет переопределить свои ответы. Тут еще хуже было. Вроде в БД я занесла его оценку а он по новой хочет исправить ее а этого нельзя ему! Вот тут я запоминала в сессии переменную. И тогда проверяла смотрел он свой результат или нет. И по кнопке назад выдавала ему что он уже не может изменить свой результат. Не знаю правильно или нет. Но другого выхода не нащла
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |