PHPやCGIなどで同じファイルにデータをポストした後に、ブラウザの「戻る」ボタンで戻ったときに「ページの有効期限切れ」になってしまうのですが、回避する方法はないでしょうか。
元のページとフィールドに入れた値を保持することはできないでしょうか。
他のファイルからポストしない限り値の保持は難しいのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

PHPのセッション機能で


session_cache_limiter
というのうがあります。
http://www.workspot.jp/tech/php_tips.html
http://jp.php.net/manual/ja/function.session-cac …

Perl/CGIではセッション機能はないと思いますので
hiddenでもちまわすとかする必要があるかと思います。
    • good
    • 0
この回答へのお礼

返事遅れまして申し訳ありません。
どうもありがとうございました。

お礼日時:2003/10/30 22:28

phpならセッションで値の保持が出来ますが。


値を保持(セッションを維持)しておけば「有効期限切れ」も出ません。

cgi(perl)では知りませんが。
    • good
    • 0
この回答へのお礼

返事遅れまして申し訳ありません。
どうもありがとうございました。

お礼日時:2003/10/30 22:28

[ツール]→[インターネットオプション]でインターネット一時ファイルを削除してみてください。



私の場合は、たいてい、これで直ります。
    • good
    • 0

IEではそうなるみたいですが、


たぶん、それはわざとそうなっているから、どうしようもないと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
でもでも、例えば
http://channel.goo.ne.jp/cgi-bin/tranavi/jrtrag. …
から駅名を入れて結果を出力したあと、「戻る」ボタンをクリックしても同じURLなのに関わらず、値は保持したままで有効期限切れも出ません。
なぜでしょう?

お礼日時:2003/10/10 09:28

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qページ移動した場合の、フォームデータの保持

PHP初心者です。

私が作っているPHPのシステムで、ユーザーがフォームデータ入力途中に、他のページに移動すると、「戻る」ボタンなどですぐに戻ってきても、入力したフォームデータが消えてしまいます。

例えば、この「教えてgoo」の「新しい質問をする」のフォームはPHPで生成されていますが、

http://oshiete1.goo.ne.jp/oshiete_new.php3?c=256

途中でちょっと他のページに行っても、(すぐ戻れば?)入力したデータは保持されますよね。

こんなふうにしたいのですが、どうすればよいでしょうか?
「戻る」ボタンで戻ったときに、サーバーから毎回新しいXHTMLをロードしてくるので、入力データがクリアされてしまうのでしょうか?

フォーム入力⇒確認画面⇒「戻る」ボタンで戻るとフォームデータが保持されないということではなく、あくまでフォーム入力中に、ちょっと他のページに行って戻ってくるという設定です。

よろしくお願いします。

Aベストアンサー

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどちらもキャッシュを保持しますが、
privateだとクライアントマシンのみキャッシュを保持します。
どちらが良いのかは使い方によると思いますし、
nocacheでないと困る時もありますから。

session_startを削除してしまって良いかどうかは、
他の部分の処理との関連が分からないので何とも言えないです。

一度試してみて下さい。

参考URL:http://jp.php.net/session_cache_limiter

原因はセッション関連にありそうですね。
session_cache_limiter()
というのは指定されていますか?
恐らく現状はnocache(ページ内容をキャッシュしない状態)になっているのだと思います。

もし
session_cache_limiter('nocache');
となっていれば、publicもしくはprivateへ変更してみて下さい。
ないようでしたら、session_start()の前に
session_cache_limiter('public');
session_cache_limiter('private');
のどちらかを記述してみて下さい。
publicだと、クライアントマシン、プロキシのどち...続きを読む

Qブラウザの戻るボタンを押したときのデータの保持の仕方

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらいました。
その時はselectタグにidを仕込んでおき、「window.onload」でgetElementByIdを使用するやり方を
教わったのですが、今回はそれでうまくいきません。

ネットで検索していてcookieを使用してデータを保持しておくというやり方も見かけたのですが、
一番効率のよいやり方はどのようなものになるのでしょうか。

どうかよろしくお願いします。


以下ソースとなります。



<html>
<head>
<title>テストテスト</title>
<script language="JavaScript"><!--
menuItem = [ [ ],
["あああ","あああ2","あああ3","あああ4","あああ5"],
["いいい","いいい2"],
["ううう","ううう2","ううう3"],
["えええ","えええ2","えええ3","えええ4"] ];
function clearOption(len){
var i;
for (i=0; i<len; i++){
document.aaa.bbb.options[i] = null;
}
}

function setMenuItem(n){
optlen = document.aaa.bbb.options.length;
while(optlen > 0){
clearOption(optlen);
optlen = document.aaa.bbb.options.length;
}

if (menuItem[n].length > 0){
for (i=0; i<menuItem[n].length; i++){
document.aaa.bbb.options[i] = new Option(menuItem[n][i],menuItem[n][i]);
for( j=1; j<=4; j++ ){
if( document.aaa.Maker.selectedIndex == [j] ){
document.aaa.bbb.options[i].value = i+([j]*10);
}
}
}
}
}
window.onload = function(){
setMenuItem(document.getElementById('q1').value);
//alert(document.getElementById('q2').value);
}
// --></script>
</head>
<body>
<form name="aaa" action="./next.html" method="POST">
<select name="Maker" id="q1" onChange="setMenuItem(this.selectedIndex)">
<option value="" selected>--- 選択してください ---</option>
<option value="1">ひとつ</option>
<option value="2">ふたつ</option>
<option value="3">みっつ</option>
<option value="4">よっつ</option>
</select>
<select name="bbb" id="q2">
<option value="" selected>--- 選択してください ---</option>
</select>
<input type="submit" name="ok" vakue="ok">
</form>
</body>
</html>

頻繁に書き込みして申し訳ありません。
どなたかお手すきでしたら、稚拙な質問にお付き合いお願い致します。


前回セレクトメニューについて教えて頂いたのですが、今回もセレクトメニューに関しての質問です。

IEでの話なのですが、セレクトメニュー1・2を選択しsubmitボタンで次のページに行き、
ブラウザの戻るボタンで戻ってきたときにセレクトメニュー2の方のデータ(value)だけ保持できていません。
前にIEはそのような仕様だという話を聞いたのですが、その時もこちらで質問させてもらい...続きを読む

Aベストアンサー

ブラウザによって動作が変わってしまいそうな気がしますね。
検証はしてないですが。

どなたかが仰るように、クッキーで値を変えてあげると良いかも知れませんね。

cookieなんですが、この情報はjavascriptの方で取得してあげる必要があります。
javascriptでは、document.cookieでドメイン上のcookieが取得できると思うので、取得した後parserなどの関数を用意して必要な値を得る必要があると思います。

cookieの発行はsubmit後のページで、サーバーサイドから出してあげた方が良いと思います。

ただ、戻るの動作によってはページの表示自体がおかしくなりそうな気もしますね。

上手く動いたら教えてください!

Qheader(Location:~)で$_SESSION[" "]が保持されない。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name="test">
<INPUT type="submit" name="Submit" value="確認画面へ">
</form>
EOD;
?>

■b.php
****************************************
<?php
$_SESSION["test"]=$_POST["test"];
header("Location:./c.php");
?>

■c.php
****************************************
<?php
echo $_SESSION["test"];
?>

自宅サーバーだと、
a.phpで入れたデータが、c.phpで表示されません。

レンタルサーバーだと、
セッションが保持され、表示されます。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、
header(Lcation:~)の記述をすると、
セッションが保持されない現象が起きています。

本番環境のレンタルサーバーは、同じ記述で、
しっかりとセッションが保持されます。
この原因は、何でしょうか?

php.iniの設定など、何か考えられることがあれば、
是非教えて下さい。

【やりたいこと】

■a.php
****************************************
<?php
echo<<<EOD
<form method="POST" action="./b.php">
<INPUT type="text" name=...続きを読む

Aベストアンサー

php.iniのsession.cookie_path設定が異なっていたとかはないですか?
ページによって再設定していたりすると、'/' と '' では異なるcookie として保存されるので、session id も異なって発行されます。
ブラウザに保存されたcookie情報も確認してみるとよいでしょう。
私も先日、このpath設定をいじってて、「sessionが保存されてない?」「消したのに残ってる?」という状況に遭遇しました。

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QFORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入力された値を表示する -->
  <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する
  <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る
 </FORM>

● c.php (完了画面)
--------------------------------------------------------------------------------
b.php について質問なのですが、
b.phpにおいて、登録ボタンと戻るボタンを2つつけて、
それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・?
<FORM method="POST" action="c.php">と書いてしまうと、
戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね??
こういう場合ってJavaScriptとかで遷移先を指定するんですか・・?
もしそうでしたら、JavaScriptがよくわからないので
できればサンプルコード示していただけると助かります・・・。
  

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入...続きを読む

Aベストアンサー

はじめまして。

<INPUT type="submit" name="submit" value="登録" onClick="form.action='c.php';return true">
<INPUT type="submit" name="submit" value="戻る" onClick="form.action='a.php';return true">

でいいと思います。(実際、このコードで使っています)
値を渡すには、FORM内にhiddenで、値を設定しておいて、methodをPOSTに設定しておけば、渡せます。

Q値の保持

図書管理システムをPHPで作っております。
本の検索結果をページングで2件ずつなどで表示しております。
そこで、貸出可能の場合チェックボックスを表示し、
1ページ目でいくつかチェックし、
次ページの検索結果に行き、またチェックボックスを
チェックし、最終的には前にチェックした値と合わせて
一括貸出処理を行いたいと思っております。

セッションを使ったり、
<a href=test.php?page=1&value=値1,値2・・・など>で
チェックした値を保持しようと思い、検索してみたのですが
いいのが見つかりませんでした。
具体的な方法があれば教えてください。

初心者のため、文章に分かりづらい点や意味不明な部分
があるかと思いますが
何卒宜しくお願い致します。

スタイルですが、
submitボタンは
貸出ボタンしか使用しないため、
チェックボックスの値をチェックした時点で
値を取得でき、それを保持したまま次ページで
もチェックした値を加えていければと思います。

Aベストアンサー

>そもそもjavascriptにPHPを記述することは
>できないでしょうか。
えっと、
javascriptは、クライアント側で実行され
PHPは、サーバー側で実行されます。
だから、
「javascriptにPHPを記述する」は、無意味なように思えます。
PHPでjavascript部分を書き出すことはできます。
勘違いしてたらごめんなさい。

がんばってください\(~0~)/

QJSPでのリストボックス表示

いつもお世話になっております。
サーブレット&JSPでプログラミングの勉強をしています。

JSPでリストボックスを表示させる際に、リストのアイテムをハードコーディングではなく、DBから取得したデータをArrayList等に格納し、表示させたいと思っています。

この場合、ループでArrayListのアイテムを1件ずつ取り出して、JSP内の<select><option></option></select>に当て込む方法が良いのでしょうか?

ちなみに以下のテーブル内容で、リストボックスには“作業内容”を表示させて、選択されたときには、“作業コード”を取得させたいのですが、どのようにすれば良いでしょうか?

テーブル
--------------------
作業コード|作業内容
--------------------
0000000001|プログラミング
0000000002|実装
0000000003|テスト

よろしくお願いします。

Aベストアンサー

<select>
<option value="0000000001">プログラミング</option>
<option value="0000000002">実装</option>
<option value="0000000003">テスト</option>
</select>

↑こういう状態を作れば、見た目には内容が、値には番号が入ります。

あとは単純にぐるぐるまわせばいいだけですね。

<select name=hoge>
<%for(i=0;i<arrayA.length();i++){%>
<option value="<%=arrayA[i]>">arrayB[i]</option>
<%}%>
</select>

スクリプトで
form.hoge[i].value = <%=arrayA[i]%>;
form.hoge[i].text = <%=arrayB[i]%>;
とかで埋め込むこともできます。
内容を書き換えたりすることがあるのなら、スクリプトを併用したほうが良いですね。

Q要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

JAVAの練習問題でわからなくて困っています

以下は線形探索のプログラムで、このプログラムを改良して、
要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

以下のような簡単なプログラムでできる方法で行いたいです。
どなたか答えまたはヒントを下さい、お願いします。
------------------------------------------------------------
import java.util.Random;
import java.util.Scanner;

public static void main (String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);

final int n = 10; //要素数
int[] a = new int[n]; //配列を宣言

for (int j = 0; j < n;)
a[j] = rand.nextInt(10);

System.out.print("配列aの全要素の値\n{ ");
for (int j = 0; j < n; j++)
System.out.print(a[j] + " ");
System.out.println("}");

System.out.print("探す数値 : ");
int key = stdIn.nextInt();

int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;

if (i < n) //探索成功
System.out.println("それはa[" + i + "]にあります。");
else //探索失敗
System.out.println("それはありません。");
}
}

JAVAの練習問題でわからなくて困っています

以下は線形探索のプログラムで、このプログラムを改良して、
要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

以下のような簡単なプログラムでできる方法で行いたいです。
どなたか答えまたはヒントを下さい、お願いします。
------------------------------------------------------------
import java.util.Random;
import java.util.Scanner;

public static void main (String[] args) {
Random rand = new...続きを読む

Aベストアンサー

えぇと, 「0~9 の値が重複しないようにする」ということ? だとしたら, 最初に 0~9 の値を入れておいて, ランダムに交換するというのが簡単ですね.
for (i=0; i < 10; ++i) a[i] = i;
for (i = 10; i > 1; --i) {
int r = rand.nextInt(i);
int t = a[r];
a[r] = a[i];
a[i] = t;
}
という感じ, かな?

Qドロップダウン、ラジオボタン、チェックボックス保持

PHP初心者です。
今会員登録のサイトを作っています。

入力画面(エラーチェック)→確認画面→登録完了

のページを作っているのですが、確認画面から「入力内容を修正する」をクリックして戻った時、チェックボックスははずれ、ドロップダウン、ラジオボタンは元の値に戻ってしまっています。
保持する場合、どのようなPHPを書けばよいでしょうか?
↓はドロップダウンのサンプルです。

<dt>
<label for="juusyo">住所</label>
</dt>
<dd>
<select name="juusyo">
<option value="群馬県">群馬県</option>
<option value="埼玉県">埼玉県</option>
<option value="神奈川県">神奈川県</option>
<option value="千葉県">千葉県</option>
<option value="東京都">東京都</option>
<option value="山梨県">山梨県</option>
<option value="長野県">長野県</option>
<option value="新潟県">新潟県</option>
</select>
<input type="submit" name="kakunin" value="確認する">
</form>

どなたかご教授くださればうれしいです。

PHP初心者です。
今会員登録のサイトを作っています。

入力画面(エラーチェック)→確認画面→登録完了

のページを作っているのですが、確認画面から「入力内容を修正する」をクリックして戻った時、チェックボックスははずれ、ドロップダウン、ラジオボタンは元の値に戻ってしまっています。
保持する場合、どのようなPHPを書けばよいでしょうか?
↓はドロップダウンのサンプルです。

<dt>
<label for="juusyo">住所</label>
</dt>
<dd>
<select name="juusyo">
<option value="群馬県">群馬県</opt...続きを読む

Aベストアンサー

ざっとこんな感じで

//nyuryoku.php
<?PHP
session_start();
$checked=array();
$selected=array();
$value=array();

function p($a,$b){
$tmp=$a;
foreach($b as $val){
if(!isset($tmp[$val])) return false;
$tmp=$tmp[$val];
}
if(!is_array($tmp)) print htmlspecialchars($tmp);
}

$c1=isset($_SESSION["c1"])?$_SESSION["c1"]:null;
foreach((array) $c1 as $val){
$checked["c1"][$val]=" checked";
}

$c2=isset($_SESSION["c2"])?$_SESSION["c2"]:null;
foreach((array) $c2 as $val){
$checked["c2"][$val]=" checked";
}

$r1=(isset($_SESSION["r1"]) and !empty($_SESSION["r1"]))?$_SESSION["r1"]:"g";
$checked["r1"][$r1]=" checked";

$r2=(isset($_SESSION["r2"]) and !empty($_SESSION["r2"]))?$_SESSION["r2"]:"j";
$checked["r2"][$r2]=" checked";

$s1=isset($_SESSION["s1"])?$_SESSION["s1"]:0;
$selected["s1"][$s1]=" selected";

$s2=isset($_SESSION["s2"])?$_SESSION["s2"]:0;
$selected["s2"][$s2]=" selected";

$t1=isset($_SESSION["t1"])?$_SESSION["t1"]:"";
$value["t1"]=$t1;

$t2=isset($_SESSION["t2"])?$_SESSION["t2"]:"";
$value["t2"]=$t2;

?>
<form action="kakunin.php">
C1:
<input type="checkbox" name="c1[]" value="a"<?PHP p($checked,array("c1","a")); ?>>a
<input type="checkbox" name="c1[]" value="b"<?PHP p($checked,array("c1","b")); ?>>b
<input type="checkbox" name="c1[]" value="c"<?PHP p($checked,array("c1","c")); ?>>c
<br>
C2:
<input type="checkbox" name="c2[]" value="d"<?PHP p($checked,array("c2","d")); ?>>d
<input type="checkbox" name="c2[]" value="e"<?PHP p($checked,array("c2","e")); ?>>e
<input type="checkbox" name="c2[]" value="f"<?PHP p($checked,array("c2","f")); ?>>f
<br>
R1:
<input type="radio" name="r1" value="g"<?PHP p($checked,array("r1","g")); ?>>g
<input type="radio" name="r1" value="h"<?PHP p($checked,array("r1","h")); ?>>h
<input type="radio" name="r1" value="i"<?PHP p($checked,array("r1","i")); ?>>i
<br>
R2:
<input type="radio" name="r2" value="j"<?PHP p($checked,array("r2","j")); ?>>j
<input type="radio" name="r2" value="k"<?PHP p($checked,array("r2","k")); ?>>k
<input type="radio" name="r2" value="l"<?PHP p($checked,array("r2","l")); ?>>l<br>
S1:<select name="s1">
<option value="" <?PHP p($selected,array("s1",0)); ?>>選択して!</option>
<option value="m"<?PHP p($selected,array("s1","m")); ?>>m</option>
<option value="n"<?PHP p($selected,array("s1","n")); ?>>n</option>
<option value="o"<?PHP p($selected,array("s1","o")); ?>>o</option>
</select><br>
S2:<select name="s2">
<option value="" <?PHP p($selected,array("s2",0)); ?>>選択して!</option>
<option value="p"<?PHP p($selected,array("s2","p")); ?>>p</option>
<option value="q"<?PHP p($selected,array("s2","q")); ?>>q</option>
<option value="r"<?PHP p($selected,array("s2","r")); ?>>r</option>
</select>
<br>
T1:<input type="text" name="t1" value="<?PHP p($value,array("t1")); ?>"><br>
T2:<input type="text" name="t2" value="<?PHP p($value,array("t2")); ?>"><br>
<input type="submit" value="確認する">
</form>

つづく・・・

ざっとこんな感じで

//nyuryoku.php
<?PHP
session_start();
$checked=array();
$selected=array();
$value=array();

function p($a,$b){
$tmp=$a;
foreach($b as $val){
if(!isset($tmp[$val])) return false;
$tmp=$tmp[$val];
}
if(!is_array($tmp)) print htmlspecialchars($tmp);
}

$c1=isset($_SESSION["c1"])?$_SESSION["c1"]:null;
foreach((array) $c1 as $val){
$checked["c1"][$val]=" checked";
}

$c2=isset($_SESSION["c2"])?$_SESSION["c2"]:null;
foreach((array) $c2 as $val...続きを読む


人気Q&Aランキング

おすすめ情報