Сделать текущий сеанс недействительным и получить новый сеанс:
//invalidate the current session
request.getSession().invalidate();
/*
get another session and get the ID (getSession()) will create a session if one does not exist
*/
request.getSession().getId();
Получить существующий; признать его недействительным; создать новый ...
1) Получить текущий сеанс с помощью HttpServletRequest.getSession ();
2) Очистите сеанс: HttpSession.invalidate ();
3) Создайте новый: HttpServletRequest.getSession (true) ;
В общем (потому что это вообще не проблема Java, это общая веб-проблема) фиксация сеанса возникает, когда идентификаторы сеанса легко обнаружить или угадать. Основной метод атаки - это когда идентификатор сеанса находится в URL-адресе страницы, например http://example.com/index?sessionId=123 . Злоумышленник может настроить захват сеанса, а затем встроить ссылку на свою страницу, обманом заставив пользователя посетить ее и стать частью своего сеанса. Затем, когда пользователь аутентифицируется, сеанс аутентифицируется. Чтобы избежать этого, не используйте идентификаторы сеанса на основе URL-адресов, а вместо этого используйте файлы cookie
. Некоторые веб-приложения будут использовать сеанс на основе файлов cookie, но устанавливать его из исходного URL-адреса, например при посещении http: // example. com / index? sessionId = 123 увидит идентификатор сеанса в URL-адресе, а затем создаст из него файл cookie сеанса, установив для идентификатора в файле cookie сеанса значение 123. Для смягчения этого риска на сервере создаются случайные идентификаторы сеанса без использования какого-либо пользовательского ввода в качестве начального значения в генераторе.
Существуют также эксплойты на основе браузера, при которых плохо закодированный браузер принимает создание файлов cookie для доменов, которые не являются исходным доменом, но с этим мало что можно сделать. И атаки с использованием межсайтовых сценариев, при которых вы можете отправить команду сценария на атакованный сайт для установки файла cookie сеанса, что можно смягчить, установив для файла cookie сеанса значение HTTP_ONLY (хотя Safari не учитывает этот флаг)
Для Java общий рекомендация
session.invalidate();
session=request.getSession(true);
Однако в какой-то момент на JBoss этого не произошло.
Пока вы аннулируете сеанс, вы все еще находитесь на сервере.
//get stuff out of session you want before invalidating it.
currentSession = request.getSession(true);
UserProfile userProfile = (UserProfile) currentSession.getAttribute("userProfile");
//now invalidate it
currentSession.invalidate();
//get new session and stuff the data back in
HttpSession newSession = request.getSession(true);
newSession.setAttribute("userProfile", userProfile);