我的网络应用程序中有以下场景:
如果用户没有点击任何内容,我会调用应该使会话过期的servlet并转发到index.jsp(应该触发登录屏幕)。 以下是使会话无效的代码:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(false);
if(session != null)
session.invalidate();
try {
request.getRequestDispatcher("/jsp/index.jsp").forward(request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
我的问题是,虽然它第一次在IE中显示登录屏幕,但第二次看起来会话没有失效,主屏幕只是在会话即将到期时保持刷新(刷新扩展了会话)。
在firefox中,它甚至没有显示第一次登录屏幕,我看到控制台中的错误进入到期servlet。
您认为这可能是什么问题?
P.S。 看起来像在IE中帮助添加这个servlet:
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
我需要进一步调查FF。
好的,回答关于FF的问题,问题是我在异步调用会话过期并且内部有重定向,所以这在FF中不起作用但在IE中出于某种原因。
答案 0 :(得分:0)
我知道为时已晚。但它可能对另一个人有所帮助。
据我所知,你的问题是 您希望在会话过期后带上登录页面。为此,您可以将以下代码行添加到您的jsp head标签中
<head><meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=login"></head>
会话过期后,它会将您的网页重定向到上面代码 url 属性中提到的网址。
您还可以将以下代码添加到JSP页面的顶部
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control",
"no-cache, no-store, must-revalidate, private, max-age=0");
response.setDateHeader("Expires", 0);
%>
<%@page session="true"%>
表示不缓存任何内容。