Значения сеанса не сохраняются, даже если Jsession остается тем же вторым доступом

ОБНОВЛЕНИЕ: После анализа моей первоначальной проблемы, которая указана во втором разделе, я обнаружил, что проблема может быть связана с ответом 304, ниже приведено подробное объяснение.

Я разработал веб-приложение, в котором пользователи нажимают на ссылку, и она переводит его в сервлет, где я устанавливаю несколько переменных сеанса, а затем перенаправляю их в jsp. В первый раз, когда я получаю доступ к приложению, все работает нормально после закрытия браузера, а затем открытия браузера и доступа к приложению, я получаю исключение нулевого указателя в jsp, потому что он пытается получить доступ к данным сеанса, причина, по которой я получаю ответ 304 для сервлета, так что это означает этот сервлет не вызывается, а мой jsp вызывается? поскольку сервлет не вызывается, значения сеанса не устанавливаются.

Правильно ли я понимаю?

Я наблюдаю это только в IE9

--------------------- Мой исходный вопрос ниже --------

Мы интегрировали Siteminder в наше приложение. Я заметил, что сеанс SM файла cookie siteminder создается для другого домена, в то время как файл cookie моего приложения создается для соответствующего домена.

Для каждого запроса я вижу новое значение smsession, но файл cookie моего приложения остается прежним, даже если файл cookie остается тем же, значения, которые я установил в сеансе с помощью сервлета, недоступны в моем jsp.

Я напечатал jsession id, jsession id одинаков для всех запросов.

Ниже поток.

Пользователь нажимает на URL-адрес, siteminder перехватывает его и запрашивает учетные данные, как только пользователь успешно входит в систему, он перенаправляется на сервлет, где я устанавливаю несколько значений в сеансе, а затем отправляю элемент управления в index.html, который имеет два фрейма. Я загружаю два jsp для этих кадров, и в этих jsps я пытаюсь получить доступ к значениям сеанса, которые я не могу получить.

Я наблюдаю это поведение только в IE9, но IE8 ведет себя правильно, первый раз доступ работает нормально, второй раз нет в IE9.

Может ли кто-нибудь сообщить мне, если изменение в smsesson влечет за собой изменения в httpssession для java-приложения? я так не думаю, поскольку идентификатор Jsession остается прежним.

Что может быть возможной причиной этого.


person sumedha    schedule 13.07.2015    source источник


Ответы (2)


Вы проверили, имеет ли jsps, вызываемый в кадрах, тот же идентификатор сеанса, что и в сервлете?

Чтобы дать вам информацию о SMSESSION и JSESSION: -

Файл cookie SMESSION id периодически изменяется веб-агентом и обычно помечается как базовый домен. Пример. Если приложение размещено на сайте a.b.com, для идентификатора JSession обычно устанавливается домен a.b.com, а для SMSESSION — домен b.com. Это поведение Siteminder по умолчанию, поскольку предполагается, что всем приложениям в домене b.com требуется файл cookie для единого входа. Вы можете изменить это с помощью ACO для агента, либо явно задав имя домена, либо задав область домена, который необходимо использовать. Если ваше приложение не имеет логики, которая зависит от значения идентификатора SMSESSION и изменяет сеанс Java, файл cookie JSessionID не зависит от изменения значения SMSESSION.

person Avi    schedule 14.07.2015
comment
это верно, спасибо, avi, однако сегодня я наблюдал другое поведение, поэтому я отредактирую свой вопрос - person sumedha; 14.07.2015
comment
Подразумевает ли изменение файла cookie новый сеанс, это относится только к сеансу Siteminder, это не влияет на сеанс Java - person sumedha; 14.07.2015
comment
Sumedha — если вы получаете код ответа 304, это означает, что браузер использует кешированные версии страницы. Вы можете попробовать две вещи: 1. Поместите оператор печати и посмотрите, печатается ли он каждый раз, когда вы обращаетесь к сервлету 2. Установите заголовки без кеша в объекте ответа сервлета и снова получите доступ. Вы всегда должны снова получать ответ 200 . См. http://stackoverflow.com/questions/3413036/http-response-caching Изменение файла cookie подразумевает изменение только Сеанс Siteminder, а не сеанс Java приложения - person Avi; 15.07.2015
comment
Perfect @avi я не вижу печатаемого кода сервлета, поэтому мне нужно изменить свой код, чтобы не устанавливать заголовок кеша в моем сервлете и повторно протестировать. - person sumedha; 15.07.2015

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

person sumedha    schedule 15.07.2015