【问题标题】:Though i prevented caching jsp pages after logout when i refresh my browser still it shows me admin.jsp pages虽然我在刷新浏览器后注销后阻止缓存 jsp 页面,但它仍然显示 admin.jsp 页面
【发布时间】:2012-01-15 06:07:46
【问题描述】:

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

被转发到jsp servlet checkpass.jsp where

  1. 代码检查用户的真实性,即检查用户名和密码的正确性,
  2. 如果用户有效,则创建会话,我设置了一些seeion 属性,如名称、id 等和
  3. 取决于用户类型,即他是管理员还是只是用户,我再次将我的 checkpass.jsp 页面转发到特定页面。这所有的编码都是在 check pass.jsp 中完成的

** 我阻止了大部分页面的缓存。但是像 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。请帮助我摆脱问题。我很乐意提供更多信息。如果需要

【问题讨论】:

  • 嘿,我真的被困在这里了,我是学生,正在做一个项目

标签: jsp session refresh logout


【解决方案1】:

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

response.sendRedirect("index.jsp");

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

另见:


与具体问题无关,我不知道您的导师/课程有什么限制/要求,但是在 JSP 文件而不是 Java 类中编写 Java 代码(例如 @987654322 @ 类或 filter 类)并使用 deprecated methodsnot the best practice。只是说您的观点也取决于此。

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 2016-01-20
    • 2018-06-19
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多