• ベストアンサー

[警告 : ページの有効期限切れ]

Perlで日記のスクリプトを書いています。 通常にアクセスしたページから、<form>タグの、POST方式で管理人のパスワードと管理人モードに行くよという情報を送って、まず管理人画面に入ります。 GET方式に直すと diary.cgi?mode=admin&pass=abcd といった感じです。 さらに管理人画面にて、新規投稿や既存の記事の削除および編集ができるようになっていまして、その記事編集をする場合は、管理人画面にてさらにPOST方式を使って編集画面へとうつります。ここでのPOST送信は分けあってJavascriptを使っています。 編集画面に移動するボタンは、削除用のフォームの中にあり、しかしフォームを入れ子構造にすることはできなく、かといってリンク等で(記事noが69の記事の場合) <a href="diary.cgi?no=69&mode=edit&pass=abcd">この記事を編集</a> という風にGet送信すると、履歴にパスワードなどがのったURLが残ってしまうから、Javascriptを使わざるを得なかったわけです。 また、編集し終わると、もとの管理人の画面に戻ります。 そこで困ったことに、編集した後などにブラウザの「戻る」や、「進む」繰り返し押したりすると、 ************************************ 警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 ************************************* という風に表示されてしまいます。 これは致命的です。 しかし何がいけないのかさっぱり見当がつきません。 ただし、編集画面へ行くときにリンク等でGET方式で送信するとこの症状が出ません。 なにがいけないのでしょうか。 限られた文字数と、サンプルソースは長すぎて載せられないため、状況をうまく説明できていませんが、不明な点があればご指摘下さい。

  • arcsin
  • お礼率46% (194/417)
  • CGI
  • 回答数2
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.2

multipart/form-dataの場合、Locationヘッダを利用することで回避したことがあります。 例えば、hoge.cgiへmultipart/form-dataでPOSTした場合・・・ [一般的なhoge.cgiの処理] 1) POSTデータを aaa.jpg で保存し 2) imgタグとかでaaa.jpgを表示して終了 ← これが問題のページ [Locationでの回避策] 1) POSTデータを aaa.jpg で保存後 2) いきなりLocationヘッダで http://~/hoge.cgi?img=aaa.jpg へ飛ばし 3) imgタグとかでaaa.jpgを表示して終了 ← 単に飛ばされてきたページなので問題発生せず つまりは、POSTデータで生成されたページは「ページの有効期限切れ」になるので表示しないというやりかたです。(こんな処理は面倒なので、なにか別の策があるなら知りたい) 単にパスワードが丸見えになるのがイヤでPOSTしているだけでしたら、 パスワードを暗号化(ハッシュ化)するなり、Cookieを利用するなりして丸見え対策したほうが近道かも。

arcsin
質問者

お礼

なるほど、ありがとうございました~。 ユーザーの使い勝手としては、ブラウザの進むや戻るをおしたときに、途中までテキストボックスに入力していたものが表示されないと使いづらいですよね Locationを使った方法等でも、期限切れは表示されなくなったものの、やはり完全にリロードしてしまう形になるので、途中まで書いていたテキストボックスの中身は消えてしまいました。 しかし、どちらにしろ元には戻せないようなので、アドバイスいただいたlocationを用いた方法でいこうとおもいます。

その他の回答 (1)

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.1

ヘッダタグにあるキャッシュの保存に関する設定が、 「残さない」設定になっていると思います。

arcsin
質問者

お礼

METAのことでしょうか。 しかしキャッシュが残っているページもあるので、少し不思議です…。 補足ですが、少し状況がかわりました。 書き込みの際は、画像アップロード機能をつけているため、 <FORM METHOD=POST ENCTYPE="multipart/form-data" ACTION=diary.cgi> を使っていたことです。うっかり忘れていました。 ファイルアップロード機能をなくして、ただのPOSTフォームにすると、期限切れが表示されなくなります。 ENCTYPE="multipart/form-data"を使う場合、これはどうしようもない問題なのでしょうか。

関連するQ&A

  • “警告:ページの有効期限切れ”と“表示されません”の違い

    ここOKWebやGoogleでも検索しましたがわからなかったので質問させてください。 下記のような流れで動くCGIを組んでおります。 先頭ページ(CGI-1)    ↓    ↓POSTにてデータ送受    ↓ 入力フォーム(CGI-2)    ↓    ↓POSTにてデータ送受    ↓ 確認フォーム(CGI-3) 上記の流れは正常に動作しているのですが、 確認フォーム(CGI-3)からブラウザの戻るボタンにて戻ったとき、 自分の確認した端末では“警告:ページの有効期限切れ”と表示されるのですが 他のある端末だと“表示されません”になってしまいます。 本来、“警告:ページの有効期限切れ”と表示されるのが正しいと思っているんですが、 なぜ“表示されません”になってしまうんでしょうか?

    • 締切済み
    • CGI
  • 警告 : ページの有効期限切れページを表示しないには??

    インターネットの画面を進んでいく際、戻るボタンを押すと、 『警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。』 と言うページが表示されます。 このページを表示させない設定ってありますか? 毎回なので困っています。 もし、あったら教えてください。 よろしくお願いします。

  • submitした後にiframeのページを戻す

    フォームからデータを送った後に前にページに戻したいのですが、何方かご教授して頂けないでしょうか? <FORM method="POST" action="http://www.xxx/get.cgi" target="iframe_2"><INPUT type="button" value="送信" onclick="submit();javascript:parent.iframe2.history.go(-1);"></FORM>

  • HTTPでフォームを送信したい

    JavaScriptで書かれた認証文字数チェックがある ユーザIDやパスなどの入力フォームを 本来サブミットで送信する内容を HTTPでPOSTまたはGETして、直接cgiにフォーム内容を 送信したいのですがその様なことは可能でしょうか? 可能でしたら方法やその理屈を教えていただけません でしょうか? 理由 通常ブラウザでアクセスするページを 専用のクライアントを作成し通信したいため submit形式のフォームをPOSTかGETで処理したい。

  • 「ページの有効期限切れ」について

    お世話になります。 同様の質問が多々あり根本的な解決に至っていませんでしたので、質問させて頂きます。 現在、ASP.NETでファイルをアップロードする画面を作成しています。 アップロード後に結果画面に遷移しています。 現象としては・・・ 結果画面からブラウザの[戻る]ボタンまたはjavascriptのhistory.back()を使用すると「ページの有効期限切れ 」と表示されてしまいます。 原因としては・・・ IEでは、フォームにファイルフィールド(<input type="file">)を使用している場合、次のページがキャッシュされないため、「戻る」ボタンを押したときに「ページの有効期限切れ 」になってしまう。 ※IEの仕様 対策として・・・ 過去の質問などから以下の2つを考えています。 1.IEを使用しない。または「ページの有効期限切れ 」でブラウザの[更新]ボタンを押下する。 2.ブラウザの[戻る]ボタンを使わせず、history.back()を使用していたボタンを直接、前画面に遷移するボタンに変更する。 そこで質問なのですが、上記の2つ以外での対応策はあるのでしょうか?

  • 条件を満たしたら、別のページに飛ばしたい

    質問させていただきます フォームからもらった値を調べ、条件が成立したら 別のページに飛ばす、ということは可能でしょうか? ↓ソースの一部です if($_GET['pass']=="pass") {  ※↓下記のjavascriptの部分をphpで再現したい echo ' <script language="javascript"> window.location.replace("test.php"); </script>'; } どなたかご教授のほどお願いいたします

    • 締切済み
    • PHP
  • 入力フォーム後の確認ページの作り方

    今、入力フォームを使ったWebページを作っています。 アンケートなどに回答すると、「これでよろしいですか?」と、 記入ミスが無いか確認できる画面が、送信ボタンを押すと表示 される場合がありますが、これってJavaScriptのみでつくるこ とは可能ですか?それともCGIを組み合わせないとダメですか?   入力フォームで入力された値をJavaScriptで作った変数に格納して、 その変数を別ページ(確認ページ)で読ませてこのようなページが できないものか考えているのですが、私の力量ではうまくいきませ んでした。   是非みなさんのお知恵をお借りしたいと思います。 よろしくお願いします。

    • 締切済み
    • CSS
  • CGIから別の隠しページへのリンクを作成したい

    CGIにてログインページを作成しました。 http://・・・・/cgi-bin/login.cgi login.cgiには認証に成功したらsecret.cgiに飛ぶという風にかかれています。 認証に成功すると確かにsecret.cgiが開きます。(ちなみにsecret.cgiはもともとsecret.htmlだったファイルのファイル拡張子をcgiに変えただけのもの) --ここから本題です。 secret.cgiから自分のページ内の別のページに飛びたい場合、具体的にいうとsecret.cgiをTOP画面とした場合、日記等の画面を表示したい場合、日記ページのファイル名がdiary.htmlとかだと、InternetExplorerなどでURLをhttp://・・・/cgi-bin/diary.htmlと入力すればログイン画面を通らずとも直接見れてしまいますよね?この場合、secret.cgiから開きたいdiaryページもsecret.cgiと同様隠しページとするにはどうすればよいのでしょうか? 1.diaryページを隠しファイルにする方法 2.secret.cgiからのdiaryページへのリンクの書き方 以上2点、ご返答よろしくお願いします。

    • 締切済み
    • CGI
  • 何度もすみません…★

    この質問は2回目なのですが、どうしても分からず 再び質問させて下さい…。 そして、どなたかお力を…。 以下のようなサイトを製作中でして… 【記事Aページ】   【記事Bページ】   【記事Cページ】  ↓              ↓        ↓  → → 【問い合わせフォーム】 ← ← この時、例えば記事Aページから 入力フォームページへアクセスしたとします。 すると入力フォームには、以下の様な画面が 表示され… 記事A 名前【  】 性別【  】 《送信》《取消》 記入事項を埋めて《送信》をクリックすると、 以下の様な確認画面が表示され… 記事A 名前【xxx】 性別【xxx】 《送信》《戻る》 そして、送信されたメールには… 記事A 名前 xxx 性別 xxx と、表示される。 と、このようなページを作りたいと考えております。 そこで分からないのは、記事Aという項目を、 入力フォームにアクセスした段階で、 フォームには既に表示されていて、 尚且つ送信内容に含ませる方法です。 フォームへのリンクのURLの末尾に記事Noを記述し フォーム側のCGIで受け取り表示する…とは聞いたものの、やり方がまったく分かりません。 CGIはPerlを使用しています。 やはり、記事ごとにフォームを 用意しなければ駄目でしょうか?

  • <a href=**?***=***>をGET方式で

    <a href="abcd.cgi?mode1=1&mode2=2&mode3=3&mode4=4&mode5=5" > としたら、このままではGET方式でデータの受け渡しが行われますよね?そうではなく、テキストリンクでPOST方式でのデータの受け渡しをしたい場合はどうすればいいですか?その際、リンクにマウスを乗せたときにブラウザ左下にリンク先のURLが出るのも避けたいです。(←無理・もしくは実装が面倒ならこれはいいです。)submitボタンは使わない方向でお願いします。 GET方式だと、履歴に****?mode1=1&mode2=2&mode3=3&… と表示されてしまうようなので、<a href=....>リンクでなんとかそれを無くしたいという事情で質問しまた。

    • ベストアンサー
    • HTML

専門家に質問してみよう