session.invalidate()在Websphere Application Server中不起作用

时间:2013-09-21 06:36:51

标签: jsp session websphere-7 invalidation

我们需要从主应用程序转到供应商登录页面。如果会话有效,那么在主应用程序中选择的数据在供应商页面中可见,我们是否正在将数据存储在会话中。 为了处理这个问题,在Tomcat中我们在Vendor login jsp。

的开头有以下代码
request.getSession().invalidate();

我们正在迁移到Websphere Application Server。相同的代码在WAS中不起作用。 我们收到了IllegalStateException。在某处,我读到WAS通过cookie处理会话。因此,如果会话已经失效,则抛出IllegalStateException。

我为WAS更改了以下代码: userId是我在主应用程序中保存在会话中的用户ID。

if ((request.getSession() != null) && (request.getSession().getAttribute("userId") != null)) { // Old session
    request.getSession().invalidate();
}

即使控制进入if条件,它也会产生IllegalStateException。 对于我们的要求,我有一个替代方法可以在供应商登录jsp的启动中删除所有会话参数,这样就不会传递任何内容。但为此,我必须逐个删除每个参数(几乎20个)。而且在将来我将保存在会话中的任何新参数,我必须更新这个jsp。

是否有任何解决方案可以使整个会话首先失效?

3 个答案:

答案 0 :(得分:2)

我们使用以下代码解决了这个问题。

<%@page session="false"%>

<%
   HttpSession session = request.getSession();
   if (session!=null) {
      session.invalidate();
   }
%>

我们在主登录jsp和供应商登录jsp中添加了此代码。因此,每次加载jsp时,都会消除自动创建HTTP会话(http://docs.oracle.com/cd/A97688_16/generic.903/bp/j2ee.htm#1008677)。然后我们明确地创建一个会话。此代码现在可以在Websphere Application Server中完美运行。

答案 1 :(得分:1)

经过一些研究后看起来应该没问题。

  HttpSession session = req.getSession(false);
    if(session == null){
       //valid session doesn't exist
       //do something like send the user to a login screen
    }
    if(session.getAttribute("username") == null){
       //no username in session
       //user probably hasn't logged in properly
    }

    //now lets pretend to log the user out for good measure
    session.invalidate();

Here is the link

答案 2 :(得分:0)

我没试过,但你可以尝试类似的东西。

if ((request.getSession() != null) && 
            (request.isRequestedSessionIdValid()) { 
    request.getSession().invalidate();
}