- PR -

ログイン後にキャッシュを無効にする方法について

1
投稿者投稿内容
BT
ベテラン
会議室デビュー日: 2006/09/24
投稿数: 81
お住まい・勤務地: Tokyo
投稿日時: 2008-02-24 19:07
お世話になります。

ウェブサイトを作るにあたり、これまで修正が入りそうなページについては
XMLやDBなどのデータソースからデータを持ってくるようにして、
それらデータの管理はログイン後に管理者権限でのみアクセスできるページ
(フォルダで制限)で修正などの操作ができるように作ってきました。
いわゆる簡易なコンテンツ管理の仕組みですが、
この方法は仕組みとしては簡単で良いのですが、
もう少し簡素化&利用者にわかりやすくしようかと思い、
DotNetNukeなどにヒントを得て、管理ページではなく、
実際にユーザが見るページ上で編集できないものかと思って試行錯誤をしております。

やり方としては、ページの中の各部分をWebユーザコントロールで作っておき、
管理者権限でログインするとそのコントロールの上部に編集ボタンが表示され、
それを押すと、コントロールが編集モードに遷移(MultiViewで実装)して
コンテンツを管理できるというものです。

これだと画面で見たままの状態で修正ができるのでいいんじゃない?
と悦に入っていたのですが、キャッシュを効かせたところ、
データの更新ができないという問題が発生するということがわかりました。
どうしたものかということで考えた結果、
編集ボタンを押すと、別の管理用ページに移動し、更新後に元のページに
戻るという方法を試してみることにしました。
かえって煩雑さが増えたような気もしないでもないですが、
ユーザには優しいだろうと思い、この路線で行こうかと考えていましたが
キャッシュを使うとやはり問題が出てきます。

今度は別ページですので管理ページにキャッシュを効かせていなければ
更新自体は完了するのですが、元ページにはキャッシュが効いているので、
ログイン後にすぐには(管理ページへ移動するための)編集ボタンが出てこない、
またログアウト後に編集ボタンが表示されたままになるということになってしまいます。

これまであまり細かなキャッシュの設定をしたことがなかったのですが、
最近、多言語化対応の過程でhttpヘッダやコントロールでのキャッシュの使い方
(別のページとして認識させる方法)を憶えました。
しかし、今回のようなケースではどうやればよいのか悩んでいます。
ログインしたらキャッシュが効かないようにしてやれば、
最初の管理方法も実現できそうですが、そういったことはできるのでしょうか?

自分なりに考えた方法としては、

(1)ログイン後に表示されるコントロールを用意して、それをVaryByで引っ掛けて別ページとして認識させる
(2)ログイン後は全てのリクエストにユニークなクエリ文字を付けてVaryByParamで別ページとして認識させる
(3)ログイン後にプログラムで何かしらのコードを書き、キャッシュを無効にする。

とりあえず、これくらいですが、(1)(2)はできそうな気はしますが、
力技という感じでスマートさに欠けるという気がしないでもないです。
かといって、(3)の方法はこれまでのところ見つけることができなかったので
果たして実現可能なものでしょうか?

あるいはこれら以外になにか良い方法やこれが常道だという方法がありましたら
アドバイスをお願いできればと思います。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)