Переадресация JSP: проблемы потери сеанса - PullRequest
3 голосов
/ 13 мая 2009

Заменив <jsp:forward page="URL"> на response.sendRedirect("URL");, я обнаружил, что теряю сеанс, как только происходит перенаправление. Есть ли способ сохранить сеанс с перенаправлением или восстановить cookie сеанса и отправить его вместе с перенаправлением?

Я знаю, что мог бы использовать JavaScript через window.location = "URL";, но это далеко от идеала!

Любая помощь?

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Когда вы используете тег jsp: forward, он перенаправляет объект request на URL, указанный тегом. Вы фактически пересылаете объект запроса.

Когда вы используете метод sendRedirect () объекта response , вы просто отправляете абсолютный URL-адрес обратно в веб-браузер клиента. Другими словами, ответ становится перенаправлением на заданный URL, который затем вызывает браузер клиента.

Если данные являются частью запроса, они теряются; так что если вы пытаетесь перенаправить, прежде чем установить атрибут имени пользователя сеанса, это произойдет.

Если вы действительно проигрываете сессию, это может указывать на несколько вещей: 1) Если новый URL не находится в том же домене, куки не будут отправлены. 2) Если новый URL находится за пределами пути cookie, файл cookie не будет отправлен. 3) В браузере не разрешено использование файлов cookie. Чтобы это имело место, вам пришлось бы кодировать URL-адреса при использовании jsp: forward, поэтому я был бы удивлен, если это так.

В любом из этих случаев будет создан новый сеанс и будет создан новый файл cookie с указанием пути нового домена и URL-адреса.

2 голосов
/ 13 мая 2009

Вам не нужно повторно отправлять cookie, потому что если у вас установлен сеанс, cookie уже должен быть на клиенте (браузере).

Вы уверены, что проиграли сессию? Как вы это обнаружили? У вас есть новый сеанс на странице, представленный URL-адресом, на который вы перенаправляете?

Принимает ли браузер файлы cookie? В противном случае вы должны использовать переписывание URL. Это наиболее вероятная причина. Вы можете попробовать использовать HttpServletResponse.encodeRedirectURL перед передачей URL-адреса на response.sendRedirect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...