一尘不染

注销后,单击“后退”按钮缓存问题

jsp

<% response.setHeader("Cache-Control","no-cache,no-store,must-revalidate");//HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server %>

注销后,在登录页面上,如果您单击“后退”按钮,则会在登录时显示旧页面。我在jsp中使用上述3行代码,并将其包含在body标签内的所有jsps中。这不适用于某些jsps。在注销后停止缓存时需要考虑哪些事项。如果jsp具有Post方法的形式,则此技术行不通?

在我的注销操作中,我正在这样做。

Cookie logoutCookie = new Cookie("somename", null);
logoutCookie.setPath("/somename");
logoutCookie.setMaxAge(0);
ServletActionContext.getResponse().addCookie(logoutCookie);

谢谢。


阅读 370

收藏
2020-06-08

共1个答案

一尘不染

我将其包含在我的所有jsps体内标签中

如果此时已提交HTTP响应,可能 为时已晚
。当已经写入X个字符(在您的情况下为HTML)字符时,将提交HTTP响应<head>。您需要将这些行放在JSP文件的最顶部,而不是<body>HTML表示形式的。


无关紧要的是,您将相同的代码行复制到多个文件中,这是一个巨大的设计错误。这不是DRY。每当你需要copypaste代码,你应该总是停下来问自己,如果没有一个
单一的 执行特定代码的地方。在您的特定情况下,应该使用aFilter代替。。另外,在JSP中编写Java代码也是一种不好的做法。

另外,您的注销方法很奇怪。不要将用户名存储在某些自定义Cookie中。您基本上是在重新设计会话。只需将登录用户存储为会话属性,然后使整个会话无效并发送重定向。

request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/home.jsp");
2020-06-08