- - PR -
キャッシュについて
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-18 12:01
はじめまして。
asp.netで開発をしているのですが、ページの有効期限切れについて教えてください。 現在、第一画面から第二画面へはServer.Transfer("b.aspx")で呼出しています。 まず一つ目の問題が第二画面から第一画面へIEの"戻る"で戻れていまいます。 httpヘッダーに <% Response.CacheControl = "no-cache" %> <% Response.AddHeader("pragme ","no-cache")%> <% Response.Expires = -1 %> と記入してみたのですがうまくいきません。 二つ目の問題が第一画面から第二画面へ"進む"で表示をした場合に 最初はページの有効期限切れが表示されるのですが、"更新"ボタンで再送信をすると また表示されてしまいます。 どなたか教えて頂けないでしょうか? | ||||||||||||||||
|
投稿日時: 2005-10-18 12:26
どもです。がると申します。
んっと。ASPについてはさほど得手ではないのですが。 質問内容が割合に基本的な部分だったので、わかる部分について 回答させていただきたいと思います。 # つまりは、ブラウザとかサーバOSとか使用言語とかに拠らない内容 # ってことになるです。
もどるボタンは基本的に「クライアント側の機能」で、 一方でaspなどが制御できるのは「サーバ側の機能」になります。 JavaScriptなどで擬似的に制御が可能な場合もありますが抜け道も 多いので、原則的には「戻るボタンが押されうる」ことを前提に 設計なりコーディングなりをされることをお勧めいたします。
えっと…「進むで表示をするときに有効期限切れ」ではまずい ように思われるのですが(苦笑 # "進む"が「画面要素」なのか「ブラウザ機能」なのかがわからないです。 恐らくは「第二画面から第一画面へ一度"ブラウザの戻るボタンで" 戻った後"ブラウザの進むボタンで"もう一度第二画面へ遷移した場合」 だと思われるので、それを前提に。 更新ボタンで再送信するという挙動は、サーバ的には「第一画面で 必要な入力をした後にsubmitする」のと同一の挙動をとるです。 多くの場合において特に不都合等はないと思うのですが。 もし何らかの不都合がある場合、その不都合を明記していただければ、 またなにかアドバイスなど可能かと思います。 それでは頑張ってください ^^ | ||||||||||||||||
|
投稿日時: 2005-10-18 12:53
がるさんこんにちは!レスありがとうございます。
今回第二画面から"戻る"を押された場合には有効期限切れのページを表示し、 第一画面へは戻さないようにしたいと思っています。 submitで戻る事には不都合はないのですが、以下のケースでちょっと問題がでています。 1.第一画面で情報を入力 2.その情報から第二画面を表示 ここで、"戻る"で第一画面へ戻る。(←本当は戻したくないのですが・・・) 3.第一画面に情報が未入力状態で再表示される 4."進む"を押すと"有効期限切れ"が表示される 5."更新"を押すことで1.で入力された情報が入力されたことになっており 第二画面が表示されてしまう。 よろしければ詳細を教えてください。 "進む"ボタンに関してはおっしゃる通りです。 "戻る"で戻ることができなければこちらの問題も解決するかと思います。 | ||||||||||||||||
|
投稿日時: 2005-10-18 14:41
「がるがるさん ご指名です〜」
ってわけで沸いてきました(笑 さて。問題点を書いていただいたので、把握できる範囲で いくつかコメントなど書いていきたいかと。 基本的に ・サーバOS不問 ・サーバ側プログラム記述言語不問 ・クライアント ブラウザ不問 の発想で行きたいと思います。
ここまでは了解です。 で。
戻るボタンで入力値が保持されるかどうか。これはブラウザ毎の仕様ですね。 なので、安全のために「未入力状態である」状態であるとしておくと よいと思うです。
この挙動は、概ね ・"進む"ボタンによって、ブラウザは「第二画面」を自らのキャッシュから表示しようとする ・「第二画面」はキャッシュしないように指定されているため(no-cache 設定)、表示に抑止がかかる ・表示が抑止されたので「有効期限切れ」が表示される という流れになります。
この場合、過去に入力されたデータがクライアント側に残っています。 もうちょっと正確には「第二画面を表示させるためにサーバに叩き込む コマンド一覧が全て」残っています(「第一画面でFORMの内容が残っている」 とは微妙にニュアンスが違うです)。 そのため、結果として「更新をおすと、入力情報を用いてもう一度第二画面 を表示すべくコマンドを発行する」といった挙動になってしまいます。 という流れになるので、全体的には「クライアント依存でまぁありがち」 な流れになってしまうです。 で。 思うに、恐らくは「情報を入力していないはずの画面から更新ボタン で入力しているようなoutputが出てしまうのが困る」んだと思う ですが…ある程度「やむをえないブラウザの仕様」になっちゃう ですねぇ。 例えば、画面1がログイン画面で画面2が認証後のTop画面とかで、 「どーしても」という場合 ・画面2を「新しいWindowで表示させる」ことで戻れなくする とかいう荒い手法もあるっちゃぁあるのですが。 # 確か、UFJ銀行さんのオンラインバンクがこのパターンです なんかぜんぜん解決になってない文面で恐縮なのですが。 なにかヒント糸口その他にでもなっているとよいのですが。 | ||||||||||||||||
|
投稿日時: 2005-10-18 14:56
ある程度はしかたないのですね。なるほどです。
ありがとうございました。 で、何度もすいませんなんですがよろしかったら ・画面2を「新しいWindowで表示させる」ことで戻れなくする とかいう荒い手法もあるっちゃぁあるのですが。 この手法について教えていただけますか? 今回の意図としてはとにかく第一画面と第二画面を"戻る"、"進む"で行き来できないように したいのです。 よろしくお願いします! | ||||||||||||||||
|
投稿日時: 2005-10-18 16:50
がるでっふ。
いあ。大した手法じゃないのですが。 画面1のFORMエレメントに、targetアトリビュートを突っ込むだけでし。 具体的には <FORM action="./hoge.asp"> を <FORM action="./hoge.asp" target="_blank"> にします。targetの文字列はまぁある程度なんでもよいのですが、 もし「存在するフレームの名前」だとそっちに行ってしまう ので、_blankにするとさっくりと新しいウィンドウを開いて くれます。 ただ、一部「targetで新しいWindowをひらくのは駄目だい」 という方もいるので、もしその場合、JavaScriptを使うって 手もあるです。 なんで駄目かっていうと、HTML4で非推奨になってしまった からです。 ちょいと余談ですが。 とまぁこんなところですが、参考になりますでしょうか? | ||||||||||||||||
|
投稿日時: 2005-10-18 17:15
実際に組み込んでみたのですが確かにwindowを開きなおすよりは
ページを切り替えてあげたほうがいいかなと思いました。 "ページの有効期限"に限らずうまく画面遷移禁止を制御してあげれたらよいのですが。 がるさんありがとうございました! 初心者なんで今後もよろしくお願いします! |
1