2009-05-13 4 views
3

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

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

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

ответ

2

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

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

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

+0

В разное время, которое я разделяю, как атрибут сеанса, имя пользователя. Когда я просто пересылаю страницу, она отображается как обычно, но когда я перенаправляюсь, я получаю «нуль» как имя ... Однако, используя работу с корзиной покупок, я знаю, что новый сеанс установлен; Я попробую вашу рекомендацию и посмотрю, решены ли мои проблемы! –

+1

И это сработало? –

2

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

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

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

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

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

Смежные вопросы