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) 个答案