我面临创建新会话并同时维护前一个会话的问题。
我的代码在一个 Servlet 中。它适用于除 IE 之外的所有其他浏览器,也适用于 IE7 和更低版本,但不适用于 IE8 和 IE9。我很清楚 IE8 和 IE9 对每个新请求使用相同的会话;但我想为我的 Java EE 应用程序的每个新初始请求创建一个新会话。HTTPSession
当会话为空时,我第一次编写了用于创建新会话的代码,并且还为新会话添加了代码。
我可以做些什么来为新会话编码更改,而不在每个页面上维护任何隐藏变量值或通过 URL 发送会话 ID?有没有其他方法可以分隔两个或多个会话?
我的 Servlet 代码快照如下所示:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
process(request, response);
}
private void process (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String strErrorMsg = null;
response.setContentType ( "text/html" );
HttpSession session = null;
Cookie cookies[] = request.getCookies();
if (session == null) {
ServletContext appContext = getServletContext();
WebProcessContextBuilder builder = WebProcessContextBuilder.getInstance();
ProcessContext objContext = null;
try {
session = request.getSession(true);
// Code for setting some initial session attributes and forwarding request
// to first window to display.
}
}
if (session != null && session.isNew()) {
// Code for new session to forward my request with saving session id
// as well as setting session attributes
} else {
// code for showing alert message like "Session active in another window or tab.";
}
}
使用上面的代码,当我第二次尝试加载新应用程序时,我总是收到一条错误消息。这是因为我得到的会话不等于 null 并且session.isNew
在 IE8 和 IE9 的情况下总是错误的。在其他地方它工作正常。