Переменная сеанса, связанная с Chrome и FF - PullRequest
8 голосов
/ 05 февраля 2011

В моем веб-приложении asp.net при загрузке страницы я беру URL текущей страницы и сохраняю его в переменной сеанса, чтобы отследить, на какой странице находится пользователь, чтобы они могли вернуться к ней, если войдут в область администратора, сделав некоторую навигациювокруг и т. д. Затем они могут нажать кнопку возврата и перейти на страницу, на которой они находились, до входа в администратор.

Все это работает в IE8;однако в FF и Chrome, когда в админе обратная ссылка перенаправляет на пользовательскую страницу 404, которую я имею для веб-приложения.

В целях тестирования я добавил код, который я написал ниже, в событие загрузки страницы:

Response.Write((string)Session["navurl"]);// displays "http://somedomain.com/customerror/default.aspx"
Session["navurl"] = currentUrl;//ex. currentUrl = "http://somedomain.com/contact/"
Response.Write((string)Session["navurl"]);//ex. currentUrl = "http://somedomain.com/contact/"

Опять же, это работает без проблем в IE, но в FF и Chrome при загрузке страницыПеременная сеанса отображает ссылку на страницу 404 и после установки отображает правильную ссылку.Я использовал fiddler, чтобы увидеть, что происходит, и Chrome добавляет 404 в заголовок GET для файла favicon.ico, который я не использую в этом веб-приложении.

Я добавил файл faviocon и ссылкув заголовке файла site.master и Chrome и FF теперь работают нормально;Я до сих пор не уверен, почему это происходит.У кого-нибудь есть идеи, почему или как моя переменная Session перезаписывается Chrome или FF?

В качестве дополнительного примечания я прошел отладку процесса, а currentUrl - правильный URL-адрес.

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Что ж, если вы используете обработчик .NET для обслуживания всех страниц (т. Е. Всех расширений файлов), то имеет смысл, когда ваш браузер отправит запрос на favicon.ico (Google, чтобы понять, что это такое), серверу не удается его найти, и он перенаправляет на 404. Что, в свою очередь, изменяет переменную Session как «последняя обработанная страница»: 404.

Теперь, когда вы рендерите свою страницу администратора и запрашиваете у сеанса «последнюю обслуживаемую страницу», что вы получаете? "404".

Я бы предложил проверить URL-адрес, чтобы увидеть, ссылается ли он на навигационную страницу пользователя, прежде чем сохранять ее в сеансе

if (IsAUserPage(currentUrl)
  Session["navurl"] = currentUrl;
0 голосов
/ 12 мая 2011

Когда вы получаете доступ к вашему администратору, вы сохраняете сеанс? Используя Fiddler, вы видели еще один запрос на вашу страницу? Найдите теги изображений с src = "" или iframes.

Вы должны установить Session var на каждой странице интерфейса, но вы никогда не должны устанавливать его на страницах администратора, только создавая ссылку «Назад». Если вы используете события Global.asax, будьте осторожны, чтобы не изменять var при обслуживании страниц администратора.

...