2010-11-24 172 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