有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java会话自动从servlet/jsp生成,尽管存在以下条件:<%@page session=“false”%>

在我的应用程序的web中,我已经给出了1分钟的会话超时。xml:

 <session-config>
    <session-timeout>1</session-timeout>
 </session-config>

我还在每一步检查servlet或jsp是否阻止自动生成新会话

例如

在每个jsp文件中,我都会给出以下几组说明,以防止自动生成:

<%@ page session="false"%>
<%@page isELIgnored="false" %>

在每个jsp文件的对应servlet中,我对会话进行身份验证,如下所示:

RequestDispatcher dispatcher;
HttpSession httpSession = request.getSession(false);

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.

if (httpSession == null) {
        dispatcher = request.getRequestDispatcher("/WEB-INF/view/sessionexpire.jsp");
        dispatcher.forward(request, response);
} else {
        // collecting the parameters from front end...

即使在当前会话到期时,它仍然会自动生成新会话。 我在应用程序中编写了一条调试语句,用于检查缺陷:

System.out.println("session id : " + httpSession.getId());

如果页面在会话过期后重新加载,上述语句将打印一个新的会话id

我想要的是,一旦会话过期,我的iframe中的相应页面应该显示会话过期的消息,并且必须强制用户重新登录

但是它所做的是,当我再次点击链接时,它会打开一个全新的页面

我还放置了一个HttpSessionListener,它为我做一些清洁工作

public class InsightHttpSessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent arg0) {

}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
    InsightDbConn insightDbConn = InsightDbConn.getInstance();

    HttpSession httpSession = arg0.getSession();

    insightDbConn.getFeatureIds().clear();
    System.out.println("feature ids list clear");
}

我真的不知道出了什么问题。请解释我在哪里留下的缺陷和会话是由自己的再生


共 (0) 个答案