Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контролы и кнопка "Назад" 
:(
    Опции темы
Nex
Дата 7.5.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.5.2007
Где: Украина, Харьков

Репутация: нет
Всего: нет



Делаю опросник, логика работы - из базы вытаскивается текст вопроса и тип, создается нужный контрол (textarea, radiobuttongroup, пр...), пользователь отвечает на вопрос, нажимает кнопку "далее", на onClick его ответ сохраняется в базу и вытаскивается следующий вопрос. Все работает, но если человек ответит на вопрос, нажмет "Далее", ему отрисуется второй вопрос, а он нажмет у себя в браузере на конопочку "Назад", и еще раз ответит на первый вопрос, то я у себя на сервере все-равно вижу контролы, сгенерированные для второго вопроса - ID вопроса и прочее. Т.е. получается что человек вроде как ответил на 2й вопрос, нажав на кнопку "Далее" на странице первого. Вообщем-то получается что контролы берутся не из сгенерированного хтмл'а, а хранятся на сервере (как бы в сессии) - по крайней мере частично? Существуют ли какие-то стандартные методы защиты от такой ситуации, т.к. она, по-моему, должна быть довольно таки распространенной?..
PM MAIL WWW ICQ Skype GTalk   Вверх
Pankon
Дата 7.5.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 2
Всего: 5



Цитата(Nex @  7.5.2007,  18:24 Найти цитируемый пост)
Существуют ли какие-то стандартные методы защиты от такой ситуации

думаю поможет javascript, который "не дает" писать в history смотри Запрет на переход - назад

PM MAIL   Вверх
Mymik
Дата 7.5.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



А что ты используешь для отрисовки всех этих контролов и нажатия на кнопки "Далее". Wizard ???

Добавлено через 9 минут и 28 секунд
Народ, я глючу или как.
    Вообще JavaScript History возвращает браузер на предыдущий URL отличный от данного URL. Правильно ??? Следовательно, если у нас разные URL адреса, то можно сделать вывод, что и событие хочешь ты того или нет, но события будут разные, ну и страницы тоже разные, ведь URL страниц разные. 
    Следовательно возникает следующий вопрос к топик стартеру -- А как ты генерируешь вопросы, что ты и где хранишь ???


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 7.5.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Может имеет смысл запретить кеширование страницы?

Код

protected override void OnInit(EventArgs e)
{
base.OnInit(e);    
Response.Cache.SetCacheability(HttpCacheability.Server);
}




Это сообщение отредактировал(а) Mymik - 7.5.2007, 22:44
PM MAIL   Вверх
Nex
Дата 10.5.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 7.5.2007
Где: Украина, Харьков

Репутация: нет
Всего: нет



Pankondazy, это все-равно проблему не решит. Человек может просто сохранить страницу к себе на комп и пр.

Mymik, визард не использую, URL остается тем же. У меня страница генерируется полностью динмаически, я получаю следующий вопрос, в зависимости от его типа создаю нужный контрол. В контроле хранится ID вопроса. Страница всегда test.aspx без всяких параметров. По onClick на кнопке "Ответить" я беру из контрола ID вопроса и текст ответа. Т.е. если бы при возврате "Назад" я бы получал ID старого вопроса меня бы все устраивало, а сейчас получается что ID вопроса новый, а отвечает человек еще раз на старый вопрос...
PM MAIL WWW ICQ Skype GTalk   Вверх
Mymik
Дата 10.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Nex, а как он тогда нажимает назад ??? я просто не понимаю механизма попадания на предыдущий вопрос... Возможно поможет такая штука как Response.Redirect страницы саму на себя. Тогда по нажатию F5 или Ctrl+R на сервере не сработает предыдущие событие. Возможно тебе это как раз и нужно...
Если это не то, то расскажи что за кнопка "назад" ??? Если это кнопка браузера, AFAIK так это ж опять таки возврат на страницу с URL отличным от данной страницы.
А можешь привести пример кода (выципи строчки) Где ты генерируешь контролы. Т.е. как ты их генерируешь... может быть собака зарыта там. И желательно где ты хранишь данные из СУБД. Как ты определяешь последующий вопрос ???


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
dazy
Дата 11.5.2007, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 15.9.2006

Репутация: 4
Всего: 8



Цитата(Mymik @  10.5.2007,  23:44 Найти цитируемый пост)
Если это кнопка браузера, AFAIK так это ж опять таки возврат на страницу с URL отличным от данной страницы.

Как я понял у Nex'а,  в любом случае будет один и тот же URL.

Я так понимаю у вас не сами конролы в сеесии хранятся, а их описание, ну там ИД вопроса, текст, тип.... Попробуйте сохранять основыне данные так же и во ViewState. А при клике на кнопке в самом начале обработки восстанавливать эти данные в session (или сверять их, и если не совпало, то в базу не писать). 
PM MAIL   Вверх
Mymik
Дата 11.5.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Если они хранятся где-то в Сессии, то лучше даже не в сессии их хранить, а в CommandArgument кнопки и запрашивать их значение из этого параметра кнопки.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 12.5.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Я делаю так. В динамическом контроле есть поле невидимое для тестируемого.  Оно содержит идентификатор вопроса из БД. Каждый раз при загрузке динамического контрола оно соответстует данному вопросу.  В динамическом контроле я вывожу ответы для данного вопроса. в зависимости от типа вопроса  эти контролы разные соответственно. Поэтому если нажать на кнопку Назад из броузера то идент. вопроса считается из этого поля. И никаих заморочек не будет. Я сама делала в точности такой вопросник. И эта кнопка меня напрягала. Но особенно когда я даю возможность посмотреть результат тестируемому а он опять по этой кнопке хочет переопределить свои ответы. Тут еще хуже было. Вроде в БД я занесла его оценку а он по новой хочет исправить ее а этого нельзя ему! Вот тут я запоминала в сессии переменную. И тогда проверяла смотрел он свой результат или нет. И по кнопке назад выдавала ему что он уже не может изменить свой результат. Не знаю правильно или нет. Но другого выхода не нащла
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.1154 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.