プロが教える店舗&オフィスのセキュリティ対策術

現在、J2EEを使用したWebアプリケーションを運用しています。
そのシステムで、ブラウザのキャッシュが残っているために不具合が起きて困っています。
ブラウザのキャッシュを破棄すれば解決することが分かっていますが、お客様に毎回キャッシュを破棄させるわけにもいきません。
なので、サーブレットかJSP(なるべくサーブレット)で自動的にブラウザのキャッシュを破棄したいのです。

ブラウザ:IE6
Java:JDK1.4

どなたか、ご存知ありませんか??
ご存知の方、よろしくお願いします。

A 回答 (2件)

意味を履き違えていました。

すいません。

> これはキャッシュを残らないようにするものではありませんか?

その通りなのですが、"cache"が無くても"history"があれば「戻る」ボタン使えますよ?
(当方、IE6/FireFox2)


以下、蛇足。

▼キャッシュの削除について
サーバサイドで動くプログラムからクライアントサイドのデータは操作できず、
キャッシュ時に有効/無効設定。
有効時はさらにいつまで有効とするのかの設定ができるだけで、
既にキャッシュされてしまったデータはどうしようもありません。
(つまり、サーバサイドプログラムの時点でアウト)

▼キャッシュとリクエストについて
キャッシュを残さない設定にした場合、
残らないのは出力するコンテンツ(サーブレット/JSPによって出力されるHTMLデータ)のみで
そこから呼ばれる画像なんかは、アドレスの動的生成やレスポンスヘッダの設定を
弄っていない限りはキャッシュされています。
(通信が発生するのは、サーブレット/JSP/HTML等のページ部分のみ)

ですので「戻る」などでキャッシュを使われた場合は、ページに対してリクエストが飛んできません。

サーバサイドで、「キャッシュが残っていたら~をする」といった処理そのものがありえないと思います。
(リクエストが飛んでくるのはキャッシュが無くなったか有効期限が切れたと考えられるから)

デバッガでブレイクポイントを設定するか、イーサリアル等で調査すれば分かります。

▼ナビゲートボタンについて
「戻る」「進む」などはブラウザが自身の"history"を見ているに過ぎず、
"cache"有無に関係なく"history"があるなら実行可能です。
キャッシュコンテンツがあればそれを使い、無ければリクエストを出します。
このあたりは実際試してみて問題があるかどうか調べてください。
(普通は"cookie"を無効にでもされない限り、ログイン等で行ったセッション維持は可能)

▼対策
どーしても破棄したいのであれば、Windows限定ですが
キャッシュを削除するクライアントアプリを作り、ユーザPCにインストールし、
ログインページでActiveXを用いてサーブレットからアプリを起動するといったぐらいでしょうか…。


お力になれず申し訳ないです。
失礼します。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

何パターンかやってみましたが、「戻る」は使えませんでした。

確かに、無理そうですね……
サーバー側からローカルのファイルをどうこうしようというのは、セキュリティの面からいっても難しそうですし。

大変参考になりました。ありがとうございました。

お礼日時:2007/02/08 10:59

サーブレット/JSP(共通)で次のメソッドを実行してあげればokなハズです。



HttpServletResponse#setDateHeader("Expires", -1);
HttpServletResponse#setHeader("progma", "no-cache");
HttpServletResponse#setHeader("Cache-Control", "no-cache");


さらに保険をかけて出力するHTMLに以下のタグを含めても良いかもしれません。

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Jan 2000 00:00:00 GMT">

HTMLのの"Expires"は適当に古い時間を指定してください。

この回答への補足

ご回答ありがとうございます。

こちらの勉強不足かもしれませんが、これはキャッシュを残らないようにするものではありませんか?
戻るボタンは使えるようにしたいのです。

例えば、システムにログインを行った時にブラウザのキャッシュを破棄し、それ以降はキャッシュを使用して戻るボタンも使えるという感じです。
説明不足だったかもしれません。すいません。

補足日時:2007/02/07 10:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!