2011-12-20 108 views
4

我在“我的网页”上单击“提交”按钮,显示一条消息“您未登录”。当然,对于登录的用户,我想而不是显示消息。我用这种方式编码:如何处理退出后单击“返回”按钮的用户

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

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

  1. 点击退出(这是在我的头和重定向另一页上)
  2. 点击“返回”按钮,在浏览器上

消息没有出现,因为我的页面没有再次渲染,addMsgToButtonEvent没有被调用。我知道我可以通过清除历史记录来阻止“返回”按钮 - 但这在业务需求方面会发生很大的变化。这是对这个问题的一些软和有效的解决方法吗?


编辑:

我想对于这样的问题,最好的办法是无效会话登出之后。我是这样做的。

+0

[防止用户可能重复(注销后)(http://stackoverflow.com/questions/419 4207 /防止用户从退回到先前受保护的页面后注销) – BalusC 2011-12-20 12:53:33

回答

3

我有类似的ASP.Net网站和登录控制问题。

你可以meta标签添加到HTML告诉浏览器不缓存它 - 因此后退按钮会导致页面无法正常服务器重装:

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

希望可能会有所帮助: )

+2

当具有相同名称的HTTP响应头已经存在时,这不起作用。缓存控制值也不完整,并且在大多数浏览器上无法正常工作(请阅读:非MSIE浏览器)。另请参阅http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407 – BalusC 2011-12-20 12:52:22

+1

@BalusC我向你的上级知识鞠躬主题:) – 2011-12-20 13:16:36

0

如果缓存问题以下行添加到您的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()

让我知道什么工作......我们可以回到以前的安全页面深入挖掘这个

+0

缓存控件属性不完整。你需要一个“必须重新验证”。另见http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407 – BalusC 2011-12-20 12:53:13