На сайте есть сотни страниц, соответствующих определенной карте сайта. Пользователь может перейти на page2.aspx из page1.aspx. Но если пользователь переходит на page2.aspx прямо через URL-адрес, помеченный книгой, пользователь должен быть перенаправлен на page1.aspx.

Изменить: я не хочу входить и добавлять код на каждую страницу, которая должна удовлетворить эту потребность.

Примечание. Это не сценарий межстраничной обратной передачи.

0
Perpetualcoder 13 Июн 2009 в 07:42

5 ответов

Лучший ответ

Вы можете подумать о чем-то, основанном на WorkFlow, например: http://blogs.msdn.com/mwinkle/archive/2007/06/07/introduction-the-pageflow-sample.aspx

Команда WCSF также включила блок приложения pageflow < / a>, который можно использовать как отдельную надстройку к своему приложению.

1
Josh 13 Июн 2009 в 04:09

Я думаю, вы можете проверить реферер, и если его нет / или это не page1.aspx, вы можете перенаправить обратно на page1.aspx.

1
ScottE 13 Июн 2009 в 03:44

Как упоминал другой ответчик, вы можете использовать заголовок реферера, но это может быть подделано клиентом.

Поскольку вы не хотите изменять каждую страницу, вы можете сделать что-нибудь с помощью IHttpModule. Предполагая, что у вас есть способ описать действительную навигацию по страницам, вы можете сделать что-то вроде этого в обработчике BeginRequest:

  • Проверьте сеанс на наличие списка допустимых страниц (используя список по умолчанию для первого посещения, если в сеансе нет ни одной).
  • Если этот запрос относится к недействительной странице, перенаправьте туда, где должен находиться пользователь.
  • На основе этого запроса настройте список допустимых страниц и страницу перенаправления в сеансе, чтобы она была готова к следующему запросу.
1
Jonathan Rupp 13 Июн 2009 в 04:11

Недавно я работал с реальным кодом, который проверял, не был ли реферер пустым, и использовал это как шаг при авторизации. Идея заключалась в том, что пользователи не смогут подделать реферер, вам не нужен собственный браузер, чтобы подделать реферер. Пользователи могут пометить вашу страницу как восхитительную, тогда в качестве источника перехода (а не пустого) будет Delicious.com.

У меня были реальные аргументы о том, насколько опытным должен быть пользователь, чтобы выполнять определенные взломы, т.е. если пользователи не знают, как установить реферер, вы можете ему доверять. Хотя это правда, маловероятно, что ваши пользователи напишут собственный браузер, но уже есть надстройки Firefox для установки заголовков, рефереров и т. Д., И они просты в использовании.

У Джоша есть лучший ответ - на странице 2 вы должны проверить журнал посещений страницы и посмотреть, посещал ли пользователь недавно страницу 1.

1
MatthewMartin 13 Июн 2009 в 04:33

Мне нравятся многие из приведенных выше ответов (в частности, рабочий процесс).

Другой вариант - создание каждой страницы как пользовательского элемента управления и наличие у page1.aspx элемента управления загружаемым пользовательским элементом управления. Это дает то преимущество, что ваш рабочий процесс хранится в одном месте, а не на каждой странице.

Однако я не думаю, что есть волшебная пуля. Похоже, что эта проблема безопасности возникла позже, или, возможно, сообщается как об ошибке, и вам было поручено исправить ее быстро и эффективно.

Я бы начал взвешивать ответы здесь с указанием связанных с ними затрат в часах .. Я подозреваю, что самым быстрым решением будет проверка адресов рефереров на каждой странице. Хотя его можно взломать, он непонятен, и, если этот риск приемлем для вас, это может быть подходящим решением.

0
itchi 14 Июн 2009 в 20:12