- PR -

キャッシュについて

1
投稿者投稿内容
イオン
ベテラン
会議室デビュー日: 2005/10/18
投稿数: 81
投稿日時: 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 %>
と記入してみたのですがうまくいきません。

二つ目の問題が第一画面から第二画面へ"進む"で表示をした場合に
最初はページの有効期限切れが表示されるのですが、"更新"ボタンで再送信をすると
また表示されてしまいます。

どなたか教えて頂けないでしょうか?
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-18 12:26
どもです。がると申します。
んっと。ASPについてはさほど得手ではないのですが。
質問内容が割合に基本的な部分だったので、わかる部分について
回答させていただきたいと思います。
# つまりは、ブラウザとかサーバOSとか使用言語とかに拠らない内容
# ってことになるです。

引用:

イオンさんの書き込み (2005-10-18 12:01) より:
現在、第一画面から第二画面へはServer.Transfer("b.aspx")で呼出しています。
まず一つ目の問題が第二画面から第一画面へIEの"戻る"で戻れていまいます。


もどるボタンは基本的に「クライアント側の機能」で、
一方でaspなどが制御できるのは「サーバ側の機能」になります。
JavaScriptなどで擬似的に制御が可能な場合もありますが抜け道も
多いので、原則的には「戻るボタンが押されうる」ことを前提に
設計なりコーディングなりをされることをお勧めいたします。

引用:

二つ目の問題が第一画面から第二画面へ"進む"で表示をした場合に
最初はページの有効期限切れが表示されるのですが、"更新"ボタンで再送信をすると
また表示されてしまいます。


えっと…「進むで表示をするときに有効期限切れ」ではまずい
ように思われるのですが(苦笑
# "進む"が「画面要素」なのか「ブラウザ機能」なのかがわからないです。

恐らくは「第二画面から第一画面へ一度"ブラウザの戻るボタンで"
戻った後"ブラウザの進むボタンで"もう一度第二画面へ遷移した場合」
だと思われるので、それを前提に。

更新ボタンで再送信するという挙動は、サーバ的には「第一画面で
必要な入力をした後にsubmitする」のと同一の挙動をとるです。
多くの場合において特に不都合等はないと思うのですが。
もし何らかの不都合がある場合、その不都合を明記していただければ、
またなにかアドバイスなど可能かと思います。

それでは頑張ってください ^^
イオン
ベテラン
会議室デビュー日: 2005/10/18
投稿数: 81
投稿日時: 2005-10-18 12:53
がるさんこんにちは!レスありがとうございます。

今回第二画面から"戻る"を押された場合には有効期限切れのページを表示し、
第一画面へは戻さないようにしたいと思っています。

submitで戻る事には不都合はないのですが、以下のケースでちょっと問題がでています。
1.第一画面で情報を入力
2.その情報から第二画面を表示

ここで、"戻る"で第一画面へ戻る。(←本当は戻したくないのですが・・・)

3.第一画面に情報が未入力状態で再表示される
4."進む"を押すと"有効期限切れ"が表示される
5."更新"を押すことで1.で入力された情報が入力されたことになっており
   第二画面が表示されてしまう。

よろしければ詳細を教えてください。

"進む"ボタンに関してはおっしゃる通りです。
"戻る"で戻ることができなければこちらの問題も解決するかと思います。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-18 14:41
「がるがるさん ご指名です〜」
ってわけで沸いてきました(笑

さて。問題点を書いていただいたので、把握できる範囲で
いくつかコメントなど書いていきたいかと。
基本的に
・サーバOS不問
・サーバ側プログラム記述言語不問
・クライアント ブラウザ不問
の発想で行きたいと思います。

引用:

今回第二画面から"戻る"を押された場合には有効期限切れのページを表示し、
第一画面へは戻さないようにしたいと思っています。

submitで戻る事には不都合はないのですが、以下のケースでちょっと問題がでています。
1.第一画面で情報を入力
2.その情報から第二画面を表示

ここで、"戻る"で第一画面へ戻る。(←本当は戻したくないのですが・・・)


ここまでは了解です。
で。
引用:

3.第一画面に情報が未入力状態で再表示される


戻るボタンで入力値が保持されるかどうか。これはブラウザ毎の仕様ですね。
なので、安全のために「未入力状態である」状態であるとしておくと
よいと思うです。

引用:

4."進む"を押すと"有効期限切れ"が表示される


この挙動は、概ね
・"進む"ボタンによって、ブラウザは「第二画面」を自らのキャッシュから表示しようとする
・「第二画面」はキャッシュしないように指定されているため(no-cache 設定)、表示に抑止がかかる
・表示が抑止されたので「有効期限切れ」が表示される
という流れになります。

引用:

5."更新"を押すことで1.で入力された情報が入力されたことになっており
   第二画面が表示されてしまう。


この場合、過去に入力されたデータがクライアント側に残っています。
もうちょっと正確には「第二画面を表示させるためにサーバに叩き込む
コマンド一覧が全て」残っています(「第一画面でFORMの内容が残っている」
とは微妙にニュアンスが違うです)。
そのため、結果として「更新をおすと、入力情報を用いてもう一度第二画面
を表示すべくコマンドを発行する」といった挙動になってしまいます。

という流れになるので、全体的には「クライアント依存でまぁありがち」
な流れになってしまうです。

で。
思うに、恐らくは「情報を入力していないはずの画面から更新ボタン
で入力しているようなoutputが出てしまうのが困る」んだと思う
ですが…ある程度「やむをえないブラウザの仕様」になっちゃう
ですねぇ。
例えば、画面1がログイン画面で画面2が認証後のTop画面とかで、
「どーしても」という場合
・画面2を「新しいWindowで表示させる」ことで戻れなくする
とかいう荒い手法もあるっちゃぁあるのですが。
# 確か、UFJ銀行さんのオンラインバンクがこのパターンです

なんかぜんぜん解決になってない文面で恐縮なのですが。
なにかヒント糸口その他にでもなっているとよいのですが。
イオン
ベテラン
会議室デビュー日: 2005/10/18
投稿数: 81
投稿日時: 2005-10-18 14:56
ある程度はしかたないのですね。なるほどです。
ありがとうございました。

で、何度もすいませんなんですがよろしかったら

・画面2を「新しいWindowで表示させる」ことで戻れなくする
とかいう荒い手法もあるっちゃぁあるのですが。

この手法について教えていただけますか?
今回の意図としてはとにかく第一画面と第二画面を"戻る"、"進む"で行き来できないように
したいのです。
よろしくお願いします!
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-18 16:50
がるでっふ。
引用:

で、何度もすいませんなんですがよろしかったら

・画面2を「新しいWindowで表示させる」ことで戻れなくする
とかいう荒い手法もあるっちゃぁあるのですが。

この手法について教えていただけますか?


いあ。大した手法じゃないのですが。
画面1のFORMエレメントに、targetアトリビュートを突っ込むだけでし。
具体的には
<FORM action="./hoge.asp">

<FORM action="./hoge.asp" target="_blank">
にします。targetの文字列はまぁある程度なんでもよいのですが、
もし「存在するフレームの名前」だとそっちに行ってしまう
ので、_blankにするとさっくりと新しいウィンドウを開いて
くれます。

ただ、一部「targetで新しいWindowをひらくのは駄目だい」
という方もいるので、もしその場合、JavaScriptを使うって
手もあるです。
なんで駄目かっていうと、HTML4で非推奨になってしまった
からです。
ちょいと余談ですが。

とまぁこんなところですが、参考になりますでしょうか?
イオン
ベテラン
会議室デビュー日: 2005/10/18
投稿数: 81
投稿日時: 2005-10-18 17:15
実際に組み込んでみたのですが確かにwindowを開きなおすよりは
ページを切り替えてあげたほうがいいかなと思いました。

"ページの有効期限"に限らずうまく画面遷移禁止を制御してあげれたらよいのですが。

がるさんありがとうございました!
初心者なんで今後もよろしくお願いします!
1

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