注销后阻止后退操作

时间:2010-11-24 05:34:00

标签: ruby-on-rails back-button

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

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

有人可以提出解决方案吗?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

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

在您的控制器中,输入:

before_filter :validate_user

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

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