gpt4 book ai didi

java - 销毁所有 session 变量而不使 session java无效

转载 作者:行者123 更新时间:2023-12-01 20:18:38 25 4
gpt4 key购买 nike

我正在尝试删除所有 session 属性而不使 session 无效,因为我需要一些像这样的 session 变量:

    session.setAttribute("fatal", "fatal error");
session.setAttribute("sgadded", "Added");
session.setAttribute("sgverified", "Something");
session.setAttribute("sgmodified", false);
session.setAttribute("glexists", false);
session.setAttribute("fatal", false);
session.setAttribute("gladded", false);
Enumeration em = session.getAttributeNames();
while(em.hasMoreElements()){
if((String)em.nextElement() != "uname"){
session.removeAttribute((String)em.nextElement());
}
}

但是我收到错误:

java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:925)
at java.util.HashMap$KeyIterator.next(HashMap.java:956)
at java.util.Collections$2.nextElement(Collections.java:3665)

有没有更好的方法可以一次删除所有 session 变量而不使 session 无效。我此时不想调用 session.invalidate()

最佳答案

这段代码中发生了一些奇怪的事情。

  • 首先,您在 while 循环中调用 em.nextElement() 两次,而第二次调用 em.nextElement() 并不能确保实际上还有另一个元素。
  • 其次,在 Java 中进行字符串比较时,不应使用 ==!=,这些运算符会检查引用相等性,您想要的是值相等,因此您需要使用 .equals 方法。在您的情况下,!"uname".equals((String)em.nextElement())。作为一个快速说明,请注意我们如何在此字符串相等性中首先使用字符串文字。这是在 Java 中执行此操作的首选方法,这样如果 em.nextElement() 碰巧为 null,此代码就不会抛出令人讨厌的 NullPointerException (因为.equals 方法检查是否为 null,如果参数为 null,则返回 false)

因此你的代码最终会看起来像这样:

while (em.hasMoreElements()) {
String element = (String)em.nextElement();
if (!"uname".equals(element))
session.removeAttribute(element);
}

关于java - 销毁所有 session 变量而不使 session java无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45272027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com