会话失效后,是否可以通过request.getSession()通过请求对象获取新会话而无需发出新请求?
我的请求对象再次流向第1页到第2页和第2页到第1页第1页到第2页再次相同的第2页到第2页....请求页面不能更改但是每次请求第1页到第二页我们需要获取详细信息到会话并使其无效并再次创建它.. 像这样
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中设置会话ID 像这样
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());
}
}
答案 0 :(得分:3)
根据Javadocs,只需致电request.getSession()
:
返回与此请求关联的当前HttpSession,如果没有当前会话且create为true,则返回新会话。
如果create为false且请求没有有效的HttpSession,则为此 method返回null。
要确保会话得到正确维护,您必须调用此方法 提交响应之前的方法。如果容器正在使用 cookie以保持会话完整性并被要求创建新的 提交响应时的会话,是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。
答案 1 :(得分:0)
invalidate()
你应该写
然后getSession()
方法将检查会话是否已存在。如果session
存在,它将return
该会话对象,否则新会话将创建并返回给客户端。
否则,如果您尝试执行类似
的操作session.inValidate();
session..trySomething() //leads to exception "Session already invalidated."