У меня возникла проблема с переменными сеанса, которые недоступны, когда запрос пришел из имени домена, а не localhost. Например, если установить переменную пользователя:Java-сессия для каждого запроса?
request.getSession(true).setAttribute("user", user);
//Redirects to another html page or something...
Когда клиент делает еще один запрос, и я пытаюсь получить доступ к переменной сеанса пользователя она возвращает нуль.
//Client makes another request to the server
request.getSession(true).getAttribute("user"); //returns null
Я заметил, что при каждом запросе устанавливается новый файл cookie JSESSIONID и изменяется значение идентификатора. Означает ли это, что новый сеанс создается каждый раз, когда клиент обращается к серверу? Как мне поддерживать один и тот же сеанс между клиентом, чтобы я мог хранить объекты в HttpSession и иметь к ним доступ?
Я не знаю, имеет ли это какое-либо отношение ни к чему, но при просмотре приложения из диспетчера tomcat количество сеансов продолжает расти независимо от того, что я использую приложение из того же окна браузера , не обновляя страницу или что-то еще. Другой признак того, что новый сеанс создается по каждому запросу на сервер?
Это происходит только при обращении к приложению от имени домена ex: example.com/app. При переходе с localhost переменные сеанса работают нормально.
Update
Я тестировал без использования response.sendRedirect и переменная сессии доступна, пока я не переключать страницы и сделать еще один запрос на сервер. Это подтверждает мои подозрения, что с каждым запросом создается новый сеанс. Это не перенаправление, которое убивает сессию, ее новый запрос. Как я могу это предотвратить?
Чтобы перенаправить на другую страницу, я использую response.sendRedirect (путь). Должен ли я использовать что-то другое? – ryandlf
Он говорит, что encodeRedirectUrl устарел ... – ryandlf
encodeRedirectUrl устарел, encodeRedirectURL не является (обратите внимание, как он заканчивается URL-адресом не Url. И да, вам нужно вызвать его перед выполнением перенаправления. Что-то вроде sendRedirect (encodeRedirectURL (путь)). –