防止用户在jsp中注销后返回[重复]

Posted

技术标签:

【中文标题】防止用户在jsp中注销后返回[重复]【英文标题】:Preventing User to go back after logout in jsp [duplicate] 【发布时间】:2012-12-18 14:59:35 【问题描述】:

可能重复:Prevent user from going back to the previous secured page after logout

我需要通过防止用户在注销后访问 Java 应用程序 (mvc) 来保护它。

目标:

1.最终用户在退出后应该无法使用浏览器后退按钮访问受限页面。 2.最终用户在退出后应该无法访问浏览器历史记录中的任何受限URL

谷歌搜索后,我了解到禁用浏览器后退按钮不是一个好习惯。那么我怎样才能在 JSP 中最好地实现这一点?

谢谢&问候 阿什什

【问题讨论】:

使用java脚本清除缓存! 【参考方案1】:

在每个页面中你大概可以清除cached page

  <%
  response.setHeader("Cache-Control","no-cache");
  response.setHeader("Cache-Control","no-store");
  response.setHeader("Pragma","no-cache");
  response.setDateHeader ("Expires", 0);

  if(session.getAttribute("some_token")==null)
      response.sendRedirect("login/login.html");

  %> 

logout 中,您必须使会话无效,因此当您单击返回时,它会检查session 中的some_token 属性值,如果不存在,它会将您重定向到login 页面。但请记住,登录后您在会话中设置some_token 属性。

【讨论】:

不好的做法。这还不够干。【参考方案2】:

保护资源的一般方法 -

    将会话属性检查(例如用户对象)放入受限页面 控制器。 注销后会话无效。

【讨论】:

【参考方案3】:

对于每个受限 JSP/Servlet,您应该检查用户是否已登录。如果用户未登录,则将其重定向到非受限页面。 (你不需要任何 javascript

<%
   int userId = session.getAttribute("userId");
   if(userId == null) 
      response.sendRedirect(redirectURL);
   
%>

当用户注销时,你的会话无效,所以当用户试图访问受限的 JSP/Servlet 页面时,你的身份验证逻辑将重定向他。

<% session.setAttribute("userId", null); // in your logout.jsp page %>

【讨论】:

这不考虑浏览器缓存。

以上是关于防止用户在jsp中注销后返回[重复]的主要内容,如果未能解决你的问题,请参考以下文章

注销后如何防止php返回页面? [关闭]

防止注销后的返回操作

jsp怎么防止重复提交

jsp怎么防止重复提交

jsp怎么防止重复提交

jsp怎么防止重复提交