Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с IE, при response.sendRedirect 
:(
    Опции темы
Opik
Дата 23.1.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Всем привет. Сделал авторизацию. после авторизации делаю:
Код

response.sendRedirect(request.getContextPath() + "/main");

потом уже на новой странице жму (CTRL +R - обновить), в лисе все отлично, обновляется страница и можно работать дальше. в IE же, он пытается заново авторизироваться.(выскакивает окно с подтверждением повторного запроса на отсылку данных, т.е как будто я редирект и не делал). или же надо делать что то ещё помимо вышеуказанной строки?
PM MAIL Skype   Вверх
COVD
Дата 23.1.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



а попробуйте убрать request.getContextPath(), вдруг поможет? По умолчанию браузер сам подставляет.
PM MAIL   Вверх
Opik
Дата 23.1.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Не помогло
PM MAIL Skype   Вверх
COVD
Дата 23.1.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



значит IE интерпретирует редирект буквально - код 302 означает, что ресурс перемещен временно , т.е. браузер запоминает изначальный адрес (а вдруг этот ресурс постоянно меняет адрес  smile ) Можно послать другой код, означающий что ресурс поменял адрес навечно, но это придется вручную делать и еще не известно, поможет ли.
PM MAIL   Вверх
Opik
Дата 23.1.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



COVD
другой это какой?
PM MAIL Skype   Вверх
COVD
Дата 23.1.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



http://www.faqs.org/rfcs/rfc2068.html
.....
Status-Code    = "100"   ; Continue
                         | "101"   ; Switching Protocols
                         | "200"   ; OK                         
....
                         | "301"   ; Moved Permanently
                         | "302"   ; Moved Temporarily
.....

301 стало быть. 

sendRedirect() , если не ошибаюсь, отсылает 302 и новый адрес. Посмотрите, может в sendRedirect есть какие-то опции, чтобы вручную значения хедера не определять.

Это сообщение отредактировал(а) COVD - 23.1.2007, 19:24
PM MAIL   Вверх
Stampede
Дата 23.1.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Opik, есть подозрение, что дело в заголовках ответа, управляющих кэшированием в браузере. Но чтобы нам тут не гадать на кофейной гуще, расскажи подробнее, как делаешь авторизацию. Судя по твоему скудному описанию, ты используешь идиому PRG (Post-Redirect-Get), и это правильно. Но все же хотелось бы знать точнее.
PM WWW   Вверх
Opik
Дата 23.1.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Stampede
Извиняюсь за скудное описание, но так и есть (я про идиому).
Т.е заполняю форму, запрос к базе, проверки, если все успешно - редирект
PM MAIL Skype   Вверх
Stampede
Дата 23.1.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Можешь привести пример трех адресов:
  • страница, где вводится логин
  • адрес, по которому идет POST
  • адрес, куда приводит редирект

И главное, при чем тут рефреш?

Это сообщение отредактировал(а) Stampede - 23.1.2007, 20:54
PM WWW   Вверх
Opik
Дата 23.1.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Stampede
1) url/login.jsp
2) url/login
3) url/main

Цитата(Stampede @  23.1.2007,  19:52 Найти цитируемый пост)
И главное, при чем тут рефреш?

нужна возможность обновлять страницу. в лисе все ок, а в ИЕ [censored 6] фигня...

PM MAIL Skype   Вверх
Tony
Дата 23.1.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

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



Код

    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Expires", "0");

Попробуй укажи.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
JUncle
Дата 23.1.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

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



Цитата(COVD @  23.1.2007,  18:13 Найти цитируемый пост)
значит IE интерпретирует редирект буквально

Так и есть.
Может попробовать RequestDispatcher?

Код

RequestDispatcher disp = request.getRequestDispatcher("/main"); // AFAIK контекст не нужен
disp.forward(request, response);

--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
Stampede
Дата 23.1.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Понятно. В принципе все делается правильно. Почему не работает в IE - ХЗ.

Заголовки кэширования тут не помогут - не тот случай. Форвард тоже не решение. С форвардом как раз сломается то, что по крайней мере работает в ФФ. Что вызвало к жизни появление темплейта PRG? Как раз проблема рефреша (и перемещения по кнопкам Взад/Вперед) страницы, созданной в ответ на POST. Чтобы ее разрешить, додумались делать так: адрес, по которому происходит POST, не должен вообще появляться в адресной строке браузера! Вместо него должен сразу идти редирект на страницу подтверждения, и браузер повторным запросом, уже по GET, ее наконец получает.

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

От этого и будем плясать дальше.

ЗЫ. Еще одна мысль пришла в голову. Прверить нечем, так как шестой IE отсутствует. Мысль такая: что если адрес для редиректа указывать не относительный, url/main, а полный, http://localhost:8080/url/main. Может, конечно и не поможет, но все-таки...
PM WWW   Вверх
Opik
Дата 24.1.2007, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



1) Request: 
Цитата

POST /login HTTP/1.1:

Response:
Цитата

(Status-Line)    HTTP/1.1 302 Moved Temporarily
Location    http://url:8080/main


2) Request: 
Цитата

(Request-Line)    GET /main HTTP/1.1

Response:
Цитата

(Status-Line)    HTTP/1.1 200 OK
Content-Type    text/xml; (у меня xml + xsl преобразования)


Смотрел через httpwatch



Это сообщение отредактировал(а) Opik - 24.1.2007, 02:32
PM MAIL Skype   Вверх
Opik
Дата 24.1.2007, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Сделал отправку 301 статуса (Moved Permanently) не помогло
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




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


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

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