2010-11-24 123 views
2

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

所以我尝试了很多方式(Ruby on Rails应用程序),如“history.forward()”,“onbeforeunload”,过期缓存中元标记,“http://www.brookebryan.com/后退按钮检测“很多..我很困惑。

任何人都可以提出解决方案吗?

+0

你必须找到答案的一个更好的机会,如果你添加“的Ruby-on-轨”标记你的问题。 – 2010-11-24 05:38:46

+0

添加了ruby-on-rails标签。 – Philipp 2010-11-24 05:39:59

回答

1

你不能这样做,并有很好的理由。如果可以禁用后退按钮,那么恶意网站都会阻止你逃离。无论如何,禁止用户的基本功能从来都不是好主意。

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

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

所有这些对我来说似乎是浪费时间,说实话。

1

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

在你的控制器,把这个:

before_filter :validate_user 

,并在您validate_user方法,确定是否有一个登录的用户(你没有提供足够的细节来看看代码这一点)。如果没有登录的用户,将其重定向到登录页面。

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

3

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

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