注销后阻止后退操作

注销后,如果我按下浏览器中的后退按钮,它不应显示上一页,它必须转到默认页面(仅限登录页面)。

所以我尝试了很多方面(ruby on rails应用程序),如“history.forward()”,“onbeforeunload”,在meta标签中过期缓存,“http://www.brookebryan.com/后退按钮检测”这么多。 。 我很迷茫。

有谁能提出解决方案?

您需要做的是禁用浏览器缓存,以便在您从页面注销后不会返回缓存页面。 您可以通过设置响应标头来避免应用程序控制器中的缓存。 怎么样?

 in 'application_controller.rb' ..... before_filter :set_no_cache def set_no_cache response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" response.headers["Pragma"] = "no-cache" response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" end 

正如在这个答案中提到的: https : //stackoverflow.com/a/748646

你不能这样做,这是一个很好的理由。 如果可以禁用后退按钮,那么恶意网站都会这样做以阻止您离开。 无论如何,禁止用户使用基本function绝不是一个好主意。

说了这么多,你可以不鼓励使用后退按钮。 如果您使用logout按钮POST一个表单然后直接响应POST(而不是重定向),那么用户将看到来自浏览器的警告,询问他们是否要重新发布表单。

我想另一个技巧是你的页面(你不希望用户能够返回的那个)向服务器发送一个AJAX请求。 如果来自该子请求的响应表明用户不再登录,则您的javascript可能会将用户退回到另一个页面。

说实话,这一切对我来说似乎是浪费时间。

最好的方法是不控制浏览器,而是控制应用程序的行为。

在你的控制器中,把它:

 before_filter :validate_user 

并在您的validate_user方法中,确定您是否有登录用户(您没有提供足够的详细信息来查看此代码)。 如果没有登录用户,请将其重定向到登录页面。

这是一个非常普遍的习语; 我总是能看到它。 您可能想要检查一些Rails应用程序的来源。 这是问题跟踪器Redmine的application_controller 。 它包含一个名为user_setup的before_filter,它导致find_current_user方法,该方法将从会话中找到User对象,或者尝试以几种方式对用户进行身份validation。