在jsp中重置会话而不会失效

cts*_*tst 8 java session jsp

我想在JSP页面中重置会话而不使其失效.原因是,用户可能已经使用会话打开了一个页面并使其无效会抛出一个NullPointerException.由于已经捕获了一个新的会话,我不想添加额外的短语.目标是清除所有属性.

我正在寻找类似的东西:

session = new HttpSession(); //this does obviously not work
Run Code Online (Sandbox Code Playgroud)

另一种选择是(?)

while(session.getAttributeNames().hasMoreElements()){
    session.removeAttribute(session.getAttributeNames().nextElement());
}    //cleans session?
Run Code Online (Sandbox Code Playgroud)

但我不确定,如果这会删除一些必要的会话属性,如login-data.

有一个很好的方法来做到这一点?

编辑:最好的解决方案是,每次打开某个页面时,都会为该窗口/选项卡创建一个新会话,直到您关闭该选项卡或重新访问该选项卡中的该页面.这个问题是通过尝试解决这个问题而发生的.

Rom*_*n C 4

是的,有一个很好的方法可以做到这一点。HttpSession创建一个包装对象并实现接口的类Map。在实现中,您可以操作会话属性而不会使会话失效。SessionMap与Struts2框架中的实现代码类似。您可以在SessionMap此处阅读文档页面。

Map用于处理 HTTP 会话属性集合的接口的简单实现。该entrySet()方法枚举所有会话属性并创建一个Set条目。请注意,这将延迟发生 - 仅当请求条目集时。

您可以在 JSF 中找到类似的SessionMap实现。您可以在此处找到文档页面。

public class SessionMap extends
    java.util.AbstractMap<java.lang.String,V>
Run Code Online (Sandbox Code Playgroud)

也可以看看: javax.faces.context.ExternalContext#getSessionMap()

如果您使用任何这些框架,您可以使用或覆盖clear()方法来获得您想要的。