Java-сервлет - Очистка сеанса (HttpServletRequest)
Общий вопрос о сервлетах Java и лучший способ обработки запросов. Если я удалю мой метод doGet из запроса удаленного сервера:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
....
<do work here>
....
kill(request);
}
private void kill(HttpServletRequest request) {
//How do I kill the user session here?
}
После того, как я обработаю запрос на моем конце и сгенерирую свой результат для запрашивающего, я хочу в основном "убить" их сеанс. В настоящее время эта сессия задерживается и, таким образом, поглощает память. Затем, как только достигается максимальное значение, все остальные вызовы выходят из строя.
Я попытался создать объект HttpSession с использованием объекта запроса, но получил те же результаты:
HttpSession session = request.getSession();
session.invalidate();
Ответы
Ответ 1
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
это правильный путь, как указано в документации. Новый сеанс будет создан, как только клиент отправит новый запрос.
Вы упомянули, что ваши сессии все еще занимают память. У вас есть другие ссылки на эти объекты в сеансе?
Вы также можете взглянуть на: поведение сеанса сервлета и Session.invalidate
Ответ 2
вы можете удалить атрибут из сеанса, используя
session.removeAttribute("attribute name");
Ответ 3
Попробуйте
session = request.getSession(false); // so if no session is active no session is created
if (session != null)
session.setMaxInactiveInterval(1); // so it expires immediatly
Ответ 4
Если вам не нужно поведение сеанса, то есть состояние между несколькими запросами. Почему вы вообще хотите создать/использовать сеанс. Не создавайте сеанс или ничего не храните в сеансе.
Чтобы убедиться, что ваш код не использует сеанс, напишите оболочку запроса, которая переопределит методы getSession()
.