Можно ли после invalidate() получить новый сеанс из объекта запроса?
Можно ли после отмены сеанса получить новый сеанс через объект запроса через request.getSession() без создания нового запроса?
Мой объект запроса передается с 1-й страницы на 2-ю страницу и с 2-й страницы на 1-ю страницу снова с 1-й страницы на 2-ю страницу и снова с той же 2-й страницы на 2-ю страницу.... страница запроса не может быть изменена, но каждый раз при запросе с 1-й страницы на 2-ю страницу мы нужно извлечь детали к сеансу и сделать недействительными и снова создать.. как это
HttpSession session = request.getsession(false)
String user = (String)session.getAttribute("name");
session.invalidate();
session=request.getSession(true);
RequestDispacher dis = request.requestDispatcher("path");
dis.forword(request,respone);
но это не работает во второй раз, это дает нулевой сеанс или детали
также попробуйте установить идентификатор сессии в следующих куки
Cookie[] c = request.getCookies();
for(Cookie k: c){
if(k.getName().equalsIgnoreCase("JSESSIONID")){
System.out.println("k.getValue() : "+k.getValue());
System.out.println("httpSession.getId() : "+httpSession.getId());
k.setValue(httpSession.getId());
}
}
2 ответа
В соответствии с Javadocs, просто позвоните request.getSession()
:
Возвращает текущий сеанс HttpSession, связанный с этим запросом, или, если текущий сеанс отсутствует, а create - true, возвращает новый сеанс.
Если create имеет значение false и запрос не имеет допустимой HttpSession, этот метод возвращает значение NULL.
Чтобы убедиться, что сеанс поддерживается должным образом, вы должны вызвать этот метод, прежде чем ответ будет зафиксирован. Если контейнер использует куки-файлы для поддержания целостности сеанса, и ему предлагается создать новый сеанс после принятия ответа, генерируется исключение IllegalStateException.
Так зовет getSession
Метод создаст вам новую сессию:
final HttpSession session = request.getSession()
Вот пример JSP, который доказывает, что код работает:
test.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Session invalidation test</title>
</head>
<body>
<%
// Uses implicit session for JSP
out.println("Session is " + session);
session.invalidate();
out.println("\nNew session is " + request.getSession());
request.getRequestDispatcher("/test2.jsp").forward(request, response);
%>
</body>
</html>
test2.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Session invalidation test</title>
</head>
<body>
<%
out.println("Session is " + request.getSession());
%>
<h1>Test 2</h1>
</body>
</html>
Когда выполняется на Tomcat6, вывод в моем браузере:
Session is org.apache.catalina.session.StandardSessionFacade@9317bfb
Test 2
что указывает test.jsp
был обработан и успешно перенаправлен на test2.jsp.
После invalidate()
ты должен написать
req.getSession(true)
затем getSession()
Метод проверит, существует ли уже сеанс или нет. Если session
существует, будет return
этот объект сеанса, в противном случае новый сеанс создает и возвращает клиенту.
в противном случае, если вы попытаетесь сделать что-то вроде
session.inValidate();
session..trySomething() //leads to exception "Session already invalidated."