我面临着创建新会话并同时维护前一会话的问题。
我的代码在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。在其他地方它可以正常工作。
答案 0 :(得分:0)
这看起来不对:
HttpSession session = null;
Cookie cookies[] = request.getCookies();
if (session == null) {
会话如何在这里不为空?
我认为应该是:
// 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) {