【问题标题】:session.invalidate() not working in Websphere Application Serversession.invalidate() 在 Websphere Application Server 中不起作用
【发布时间】:2013-09-21 06:36:51
【问题描述】:

我们需要从主应用程序进入供应商登录页面。如果会话有效,则在主应用程序中选择的数据在供应商页面中可见,我们将数据存储在会话中。 为了处理这个问题,在 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。

如果它是旧的,是否有任何解决方案可以首先使整个会话无效?

【问题讨论】:

  • 如果会话已经过期,这行会抛出异常 if (request.getSession().getAttribute("userId") != null)
  • 对不起,我没有正确提及,我还在检查用户 ID 之前对会话进行 Null 检查。我已经更新了问题。
  • 我建议你去听听者。
  • stackoverflow.com/questions/18898141/… 找到了另一个解决方案,这看起来更有希望。

标签: jsp session websphere-7 invalidation


【解决方案1】:

我们用下面的代码解决了这个问题。

<%@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 中完美运行。

【讨论】:

    【解决方案2】:

    经过一番研究,看起来应该没问题。

      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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • @Mark **有什么用
      • @javaBeginner 我只是重新格式化了代码并没有真正阅读它 - 看起来响应者试图突出显示它并使其有点粗体
      • 对不起,伙计,我有 ** 让这部分加粗...但是当我形成代码时,它没有变粗并保持 **。
      猜你喜欢
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2017-10-21
      • 2017-10-07
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多