【问题标题】:How to deal with users who click "Back" button after sign out退出后点击“返回”按钮的用户如何处理
【发布时间】:2012-01-24 06:37:35
【问题描述】:

我显示一条消息:

“您尚未登录”

对于在我的页面上单击“提交”按钮的客人。当然,对于已登录的用户,我希望 显示该消息。我是这样编码的:

<c:if test="${someCondition}">
addMsgToButtonEvent();
</c:if>

它(几乎)完美地工作。但是,现在当用户登录并且:

  1. 点击退出(在我的页眉中并重定向到另一个页面)
  2. 点击浏览器上的“返回”按钮

消息没有出现,因为我的页面没有再次呈现,addMsgToButtonEvent 没有被调用。我知道我可以通过清除历史记录来阻止“后退”按钮 - 但这会对业务需求产生太大影响。这是解决这个问题的一些软而有效的解决方法吗?


已编辑:

我认为解决此类问题的最佳方法是在注销后使会话无效。我就是这样做的。

【问题讨论】:

标签: javascript jsp servlets dom-events back-button


【解决方案1】:

我在 ASP.Net 网站和登录控件方面也遇到过类似问题。

您可以在 HTML 中添加一个元标记来告诉浏览器不要缓存它 - 因此后退按钮将导致页面从服务器正确重新加载:

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta http-equiv="EXPIRES" content="0">

希望能有所帮助:)

【讨论】:

  • 当同名的 HTTP 响应标头已经存在时,这将不起作用。缓存控制值也不完整,在大多数浏览器(阅读:非 MSIE 浏览器)上不会按预期工作。另见stackoverflow.com/questions/49547/…
  • @BalusC 我向您在该主题上的卓越知识鞠躬 :)
【解决方案2】:

如果缓存有问题,将以下行添加到 JSP 的顶部

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

如果这不能解决问题...您可能想看看您是如何处理显示代码和会话失效的。

最好的方法是:

当你创建一个会话时分配一个命名属性 为了打印语句检查命名属性的存在 如果找到命名属性...打印消息否则不要这样做 注销时...执行 session.invalid()

让我知道什么是有效的......我们可以更深入地研究这个

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多