0

我面临创建新会话并同时维护前一个会话的问题。

我的代码在一个 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 的情况下总是错误的。在其他地方它工作正常。

4

1 回答 1

0

这看起来不对:

HttpSession session = null;
Cookie cookies[] = request.getCookies();

if (session == null) {

session 如何在这里不为空?

我认为应该是:

// Try to get the session, but don't create one if there isn't one
HttpSession session = request.getSession(false);
Cookie cookies[] = request.getCookies();

if (session == null) {
于 2013-04-27T08:29:35.927 回答