2010-11-24 35 views
2

ログアウト後、ブラウザの戻るボタンを押すと、前のページは表示されず、デフォルトページ(ログインページのみ)に移動する必要があります。ログアウト後のバックアクションを防ぐ

私は、 "history.forward()"、 "onbeforeunload"、メタタグ内のキャッシュを期限切れにして、 "http://www.brookebryan.com/ back button detection "非常に多くの..私は非常に混乱しています。

誰も解決策を提案できますか?

+0

。 –

+0

にruby-on-railsタグが追加されました。 – Philipp

+1

あなたのアプリケーションで 'sessions'を使用している場合は、すべての安全なページの' session'を確認してください。 – FosterZ

答えて

1

あなたはこれを行うことはできません。戻るボタンを無効にすることができれば、悪意のあるサイトはすべてあなたから離れないようにします。とにかくユーザーの基本機能を許可しないことは決して良い考えではありません。

すべてのことを言って、戻るボタンの使用を妨げることができます。ログアウトボタンPOSTをフォームにして、リダイレクトするのではなくPOSTに直接応答すると、フォームを再POSTするかどうかを尋ねる警告がブラウザから表示されます。

AJAXリクエストをサーバーにロードするために、もう1つのトリックがユーザーのページに戻ってくると思います。そのサブリクエストからの応答がユーザーがもはやログインしていないことを示している場合、JavaScriptはユーザーを別のページにバウンスさせる可能性があります。

これは正直言って私にとっては時間の無駄だと思われます。

1

ブラウザを制御するのではなく、アプリケーションの動作を制御するのが最善の方法です。お使いのコントローラで

、この置く:(あなたは、このためのコードを参照するには十分な詳細を提供しなかった)

before_filter :validate_user 

とあなたのvalidate_user方法では、あなたがログインしたユーザーを持っているかどうかを判断します。ログインしているユーザーがいない場合は、ログインページにリダイレクトします。

これは非常に一般的なイディオムです。私はいつもそれを見る。いくつかのRailsアプリケーションのソースを調べることができます。 Redmineのissue trackerにはapplication_controllerがあります。これには、セッションからUserオブジェクトを見つけるfind_current_userメソッドにつながるuser_setupというbefore_filterが含まれています。または、ユーザーをいくつかの方法で認証しようとします。

+0

これはブラウザのキャッシュを考慮していません。私は、前のページがサーバーに要求されなくても見られないようにしたいと思っていました。 – noodl

+3

上記に加えて、 'Cache-Control:no-cache'ヘッダーを追加します。 –

3

あなたがしなければならないことは、ブラウザキャッシュを無効にして、ページからログアウトした後にキャッシュされたページを返さないようにすることです。これを行うには、アプリケーション・コントローラーでのキャッシュを避けるためにresponse-headerを設定します。どうやって?

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

関連する問題