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

标签 jsp session websphere-7 invalidation

我们需要从主应用程序转到供应商登录页面。如果 session 有效,则在主应用程序中选择的数据在供应商页面中可见,我们是否将数据存储在 session 中。 为了处理这个问题,在 Tomcat 中,我们在供应商登录 jsp 的开头有以下代码。

request.getSession().invalidate();

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

我将 WAS 的代码更改为如下所示: userId 是我在主应用程序的 session 中保存的用户 ID。

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

即使控制进入 if 条件,它也会给出 IllegalStateException。 对于我们的要求,我有一种替代方法可以删除供应商登录 jsp 开始时的所有 session 参数,这样就不会传递任何内容。但是为此,我必须一个一个地删除每个参数(那里有近 20 个)。并且将来我将在 session 中保存的任何新参数,我都必须更新此 jsp。

如果session老了,有没有办法先让整个session失效?

最佳答案

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

<%@page session="false"%>

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

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

关于jsp - session.invalidate() 在 Websphere Application Server 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18929718/

相关文章:

java - Struts - 异常 - 找不到 Struts 调度程序

javascript - Spring MVC - 使用 Japascript 对象设置\填充 JSTL\JSP 对象的内容

session - Gorilla session 不适用于客户端的 CORS

websphere - 旧版本的 WebSphere Application Server v7(免费试用)

java.lang.ArrayStoreException IBM Websphere

java - 将表单输入值分配给jsp中的java变量

java - Spring security 不知道 spring mvc View 前缀

php - Laravel Blade 中不显示 session 值

session - 如何跨多个Web应用程序,多个微服务跟踪 session

java - 具有 java.lang.illegalstateexception state== header 的 WebSphere 服务器和 Jetty 客户端