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

How to logout and redirect a JSP application when back button is pressed?

我正在使用 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

但我面临的问题是它没有统一工作。设置无缓存选项有时会起作用。有时它会显示页面已过期(预期)的错误。但是当我再次点击后退然后前进时,页面按原样存在(意外行为)。如果我在按下后退按钮后输入 url,那么它也可以访问。同样,如果我打开两个单独的会话,那么它在一个会话中工作,在另一个会话中不工作。

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

是否有解决此问题的方法?

我发现了一些解决相同问题的其他示例,但它们使用的是另一种语言 (PHP)。我不熟悉php,所以我无法解读代码的含义。

感谢任何帮助。

此致, 拉乔希慕克吉。

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

Disable browsers back button if the session is invalidated

Prevent user from seeing previously visited secured page after logout

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

感谢大家阅读。

编辑:我 运行 前段时间遇到了另一个问题。在我使用的 servlet 中
request.getRequestDispatcher("url").forward(request, response);
这造成了一个问题。即使该页面已过期,如果我重新加载该页面,该页面将再次正常显示或出现错误页面。看起来好像会话根本没有过期。为了克服这个问题,我使用了
response.sendRedirect("url");
这样一来,响应就被永久地重新定位到下一页,并且页面加载的所有验证都成功进行了,所以没有错误的数据出现。