Неправильный сеанс в сервлете выхода

java jsp servlets

36380 просмотра

5 ответа

HttpSession session  = request.getSession();
try
{      
    session.removeAttribute("logonSessData");
    session.invalidate();                               
    String pageToForward = request.getContextPath();
    response.sendRedirect(pageToForward);           
}
catch (Exception sqle)
{
    System.out.println("error UserValidateServlet message : " + sqle.getMessage());
    System.out.println("error UserValidateServlet exception : " + sqle);
}

в сервлете выхода я написал выше код doPostи doGetметод. После выхода из системы он показывает экран входа в систему, а затем, если я нажимаю кнопку «Назад», он показывает предыдущий экран перед выходом из системы, а затем, если я нажимаю на любой странице, он показывает «HTTP Status 500», а теперь, если я нажимаю, F5то он нагревает сервлет входа и получает полный доступ пользователь.

Как остановить эту проблему, показать, что после выхода из системы с помощью кнопки назад и F5пользователь не может использовать любую страницу?

Автор: user1429962 Источник Размещён: 12.11.2019 09:36

Ответы (5)


5 плюса

То, что ты делаешь, хорошо. Браузер кэширует предыдущие страницы, и когда вы нажимаете кнопку «Назад», он переходит на предыдущую кэшированную страницу.

Вам необходимо добавить заголовки кэша, которые не позволяют браузеру кэшировать страницу.

Cache-Control: no-cache
Автор: Ramesh PVK Размещён: 25.03.2013 11:18

1 плюс

1) Когда вы нажимаете кнопку «Назад» в браузере, вы получаете предыдущую страницу из-за кеша браузера.

2) Когда вы нажимаете на любую страницу после резервного копирования, вы получаете статус 500, потому что есть исключение нулевого указателя, потому что объект сеанса уже недействителен.

3) Когда вы обновляете новый запрос к вашему сервлету или JSP, вы вызываете request.getSession();метод, который создает для вас новый объект сеанса.

в результате вы снова получаете полный доступ ко всем страницам.

Чтобы избежать этой проблемы, вы можете выполнить следующие шаги.

1) В приложении создайте один сервлет Ex:LoginCheckerServlet

2) для приведенного выше сервлета укажите шаблон URL / *

3) Таким образом, сервлет будет выполнен для всех запросов

4) Теперь LoginCheckerServletпроверьте имя пользователя и пароль в параметрах запроса.

5) Если они приходят, выполните проверку входа в систему и откройте страницу приветствия.

6) Если имя пользователя пароль не приходит, есть два значения

     i)user is already logged in 

    ii)user is trying to access your app illegally

7) Теперь вызовите request.getSession(false);метод, который даст вам объект сеанса, если для этого пользователя уже существует сеанс, так что вы можете перенаправить его на страницу приветствия с доверием пользователя.

8) request.getSession(false);даст вам нулевое значение, если для этого пользователя не существует сессии.

9) Если вы не получаете имя пользователя и пароль в параметрах запроса, а также request.getSession(false);задаете нулевое значение, значит, пользователь пытается получить доступ к вашему приложению без входа в систему, теперь вы можете с радостью отобразить запрещенную страницу.

Автор: Jagadeesh Размещён: 10.06.2014 11:24

-1 плюса

В каждом сервлете проверьте, является ли Session пустым или нет. Если сессия не нулевая, тогда только обработка запроса выполняется, иначе перенаправьте на страницу входа.

HttpSession session  = request.getSession();

if(Session !=null)
{
try
{      
    // acutal servlet actions

}else
{

  // redirect to login page

 }

Также было бы хорошо, если бы вы добавили нулевую проверку для сеанса в коде выше.

HttpSession session  = request.getSession();
if(session !=null)
try
{      
    session.removeAttribute("logonSessData");
    session.invalidate();                               
    String pageToForward = request.getContextPath();
    response.sendRedirect(pageToForward);           }
catch (Exception sqle)
{
    System.out.println("error UserValidateServlet message : " + sqle.getMessage());
    System.out.println("error UserValidateServlet exception : " + sqle);
}
}else
{
  //session already null/ expired
}
Автор: Avinash K.P Размещён: 25.03.2013 11:24

-3 плюса

Что вам нужно сделать, это установить сеанс в атрибут на основе сеанса.

request.getSession().setAttribute("sess",request.getSession());

Используйте это, чтобы сравнить его с текущим сеансом. Если это сравнение не удается, то перенаправить на страницу входа. Это должно быть сделано на каждой странице.

Автор: Aashray Размещён: 25.03.2013 11:16

-3 плюса

Это создаст новую сессию

HttpSession ss = request.getSession(true); //creates a new session.
  if(ss.isNew()){
    ss.invalidate();  //this clears the session
    ss = request.getSession(true); // creates a new session 
    }
Автор: Rohit Goyal Размещён: 13.06.2014 12:28
Вопросы из категории :
32x32