如何在按下后退按钮时注销和重定向JSP应用程序?

时间:2016-07-08 12:27:20

标签: jsp session redirect url-redirection logout

我正在使用JSP和Oracle 11g开发Web应用程序。我能够跨会话维护数据并注销会使会话无效,从而安全终止Web应用程序。

但是,我无法解决后退按钮的问题。我的项目与银行业务有关,因此应用程序中的数据被认为是敏感的。因此,我希望实现以下功能:如果有人按下后退按钮,则应终止会话并将其重定向到登录页面。尝试进行此操作的进一步尝试应该是重定向到登录页面。 我遵循了以下主题:

Disable browsers back button if the session is invalidated

Prevent user from seeing previously visited secured page after logout

servlet session , after logout , when back button of browser is pressed , again the secure page is shown

但我面临的问题是它不能统一运作。设置no cache选项有时会起作用。有时它显示页面已过期(预期)的错误。但是当我再次点击然后再转发时,页面就会出现(意外行为)。如果我在按下后退按钮后输入了网址,那么它也可以访问。再次,如果我打开两个单独的会话,那么它在一个工作而不在另一个工作。

它变得有点混乱,并导致意大利面条代码。

有关于这个问题的工作吗?

我找到了一些解决同一问题的其他例子,但它们是另一种语言(PHP)。我不熟悉php,所以我无法破译代码的含义。

感谢任何帮助。

此致 Rajorshi Mukherjee。

1 个答案:

答案 0 :(得分:0)

好的,谢谢那些看过这些问题的人。当然,我期待有人帮我摆脱这种束缚。 无论如何,我找到了解决我正在处理的问题的方法。我添加了这些帖子中共享的代码:

Disable browsers back button if the session is invalidated

Prevent user from seeing previously visited secured page after logout

显示编译指示,缓存控制的部分,我发现在我在应用程序中出现的每个页面中包含此代码可以解决问题。因此,如果用户登录系统然后遍历许多不同的页面然后突然决定返回,在所有页面中他将发现该页面已过期且不再可访问。然而,登录的第一页仍然显示给用户,因为用户可能再次想要在他返回第一页时使用他的凭证登录。我最初遇到这个问题的问题,因为当我向前推进时,页面将再次可见。但我现在意识到这主要是因为我没有将缓存控制指令包含在所有页面中。

感谢您阅读。

编辑:一段时间后我遇到了另一个问题。在我使用的servlet中     request.getRequestDispatcher("url").forward(request, response);
这造成了一个问题。即使页面已过期,如果我重新加载页面,那么页面将再次正常显示或获取错误页面。似乎会话根本没有过期。为了克服这个问题,我用过     response.sendRedirect("url");
这样,响应被永久地重新定位到下一页,并且页面加载的所有验证都成功完成,因此没有错误的数据在升级。