虽然我在注销后阻止缓存jsp页面,但是当我刷新浏览器时它仍然向我显示admin.jsp页面

时间:2012-01-15 06:07:47

标签: jsp session refresh logout

我有一个login.jsp网页,当用户在我的网页上提交按钮时,我有两个用于用户名和密码的文本框**

  

转发到jsp servlet checkpass.jsp,其中

  1. 代码检查用户的真实性,检查用户名和密码的正确性,
  2. 如果用户有效则会创建会话,我已经设置了一些遗留属性,如姓名,身份证等,
  3. 取决于用户的类型,无论他是管理员还是仅用户,我再次将我的checkpass.jsp页面转发到特定页面。所有编码都在check pass.jsp
  4. 中完成

    **我阻止了大多数页面的缓存。但是像login.jsp,logout.jsp,index.jsp这样的页面。只有当用户有效时才创建会话我没有编写代码来检查像

    这样的代码的会话
    <%
    try{
       String username = session.getValue("UserName").toString();
       String s_Password = session.getValue("password").toString();
       String id = session.getValue("ID").toString();
       // String s_Email = session.getValue("email").toString();
       if ((username==null) ||  (s_Password==null) || (id==null))
           {
        %>
          <jsp:forward page="index.jsp?error=You have Logged Out !!!" />
        <% 
        }}
       catch(Exception e)
       {
           e.printStackTrace();           
                   %><jsp:forward page="index.jsp?error=" />
                   <% 
        }
    %>
    

    此类代码不存在。所以会发生什么,虽然我阻止了其他包括checkpass.jsp的缓存,当我通过session.invalidate()方法终止注销会话时。因此,当我使用浏览器的后退按钮时,它并不显示所有页面被重定向到index.jsp的页面,如上所述。但是因为这样的代码不存在checkpass.jsp浏览器显示我的一些消息说尝试重新加载页面,因为这个页面需要一些数据,即我猜用户名和密码,当我按下浏览器的刷新按钮时它显示我我的admin.jsp页面我希望当有人注销时,虽然我按下或刷新浏览器的按钮按钮,但不应显示任何网页。这是我的网络应用程序。为此我使用net beans和MySQL和Apache tomcat。请帮助我解决问题。我很乐意提供更多信息。如果需要的话

1 个答案:

答案 0 :(得分:2)

你没有重定向。你要转发。您需要发送重定向而不是转发。

response.sendRedirect("index.jsp");

这样,服务器将指示客户端在给定资源上发送全新的GET请求,而不是使用给定资源作为当前POST请求的响应,就像转发一样。所以刷新不会重新提交以前的POST请求。

另见:


对具体问题

无关,我不知道你的导师/课程有什么限制/要求,但是在JSP文件而不是Java类中编写Java代码(例如{{{ 3}}类或servlet类)并使用filterdeprecated methods。只是说这个案例你的观点也取决于那个。