web-dev-qa-db-ja.com

ログアウト後、戻るボタンを押すと、ログインが必要な最後のページが表示されます

Webアプリケーションでデバイスを構成しました。次のワークフローに問題があります。

管理パネルにアクセスするには、ログインする必要があります。その後、通常どおりWebアプリの管理パネルに移動します。ログアウトをクリックすると、これまでの動作であるルートページにリダイレクトされます。

このページで、上記のアクションの後、キャッシュされた最後のページを表示しているブラウザの戻るボタンをクリックすると、奇妙なことが始まります。 [更新]をクリックするとリダイレクトされ、ログインしてページにアクセスするように指示されているため、セッションが破棄されましたが、ブラウザの最後の履歴ページを表示したくありません。

これはどのように可能であり、それを防ぐために何ができますか?それはブラウザのキャッシュと関係がありますよね?これを修正する唯一の方法は、この動作を防ぐために、ログインしたページからキャッシュを削除することです。どうやってやるの?

30
JohnDel

キャッシュを防ぐためにページのヘッダーを設定する必要があります。あなたはそのようにそれをすることができます:

  before_filter :set_cache_buster

  def set_cache_buster
    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

クレジットは このスレッド の最初の応答に送られます。

58

あなたはブラウザにものをキャッシュしないように言うことを試みることができます、しかしそれはそれが何であるかです-試み。

彼らが以前にページを表示した場合、ページを再度表示できないようにするためにできることはほとんどありません。その時点では、ある程度制御できません。

たとえば、ページのHTML(ページを表示するときに実行していること)をダウンロードでき、スクリーンショットなどの撮影を阻止することもできません。

とはいえ、ブラウザのキャッシュはいくつかの(ほとんど?)場合に機能します。MichaelFrederickの回答を参照してください。

5

これは間違いなくキャッシングと関係があります。それに応じて適切なHTTPヘッダーを設定する必要があります。これはおそらくあなたが必要とする答えを持っています: Railsでブラウザページのキャッシュを防ぐ方法

  • ヨハネス
3