投稿者 メッセージ
<  PHPプログラミング  ~  セッションを用いたフォームデータの持ちまわし
波多野貴文
投稿1時間: 火 10月 24, 2006 12:19 pm  引用



登録日: 2006年10月 19日
投稿記事: 8

PHPを用いた会員ログインシステムを作成しています。
login.phpでID,パスワードをチェックし、正しければ作業用の画面、search.phpを開きます。
serch.phpからバックスペースキーでページを戻すと以下のエラー文がでます。

警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。
情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。

対策として、セッションを用いる方法を試したのですがうまくいきません。
ソースは以下の通りです。

if($_SESSION['loglfg']==1){
$id=$_SESSION['logid'];
$pass=$_SESSION['pass'];
}

else{
$id=$_REQUEST['id'];
$pass=$_REQUEST['pass'];
}

if($id="正しいID" and $pass="正しいパスワード"){
$_SESSION['logflg']=1;
$_SESSION['logid']=$id;
$_SESSION['logpass']=$pass;
$_SESSION['gnum']=$res1[0][0];
include 'serach.php';
}

このソースでも上記エラー文がでます。
他にも何か良い対策があるのでしょうか?ご存知の方いらっしゃいましたらご教授お願いします。
トップに移動
ユーザー情報を表示 メッセージを送信
allison
投稿1時間: 火 10月 24, 2006 1:30 pm  引用



登録日: 2006年10月 21日
投稿記事: 13

波多野さん、こんにちは。

「エラー」と仰っているのは、ブラウザが出す alert のことですよね?
フォーム送信直後に「戻る」や「更新」が実行されるときの、
フォーム内容を再送信してもいいですか? という確認のメッセージですから、
それが表示されるのは自然なことだと思いますよ。

したがって、例えば掲示板を作る場合で言うと、
「最後に保存したものと同じ内容なら、二重投稿の可能性が高いので保存しない」
というような処理を組み込めばいいわけです。

ご質問では、ログイン後に前のページ戻ろうとすると alert が出る…ということですから、
ログイン済みのユーザーなら、ログインに係わる処理をスキップすれば良いのではないでしょうか。
再送信されても不具合が出ないようにする…ということです。

# お書きいただいたソースはコピペですか?
# パスワードは crypt 等で加工して扱うようにした方が良いと思いますよ。
#(その部分をここに書いていないだけでしたらごめんなさい。)
トップに移動
ユーザー情報を表示 メッセージを送信
波多野貴文
投稿1時間: 火 10月 24, 2006 2:12 pm  引用



登録日: 2006年10月 19日
投稿記事: 8

allisonさん、返信ありがとうございます。
仰る通り、ブラウザのエラーです。
ログイン処理を飛ばすように作業用ページに戻るボタンを実装しました。
しかし、ブラウザの「戻る」やバックスペースキーで戻る人もいると考えるとそちらの対策も施したいのですが、これはどうにもならないのでしょうか?

パスワードの処理ですが、ソース部分を短く書くために省略させていただきました。
トップに移動
ユーザー情報を表示 メッセージを送信
allison
投稿1時間: 火 10月 24, 2006 2:57 pm  引用



登録日: 2006年10月 21日
投稿記事: 13

再送信時の alert を出さないようにするには、
method="get" にする程度の方法しかないと思います。
それと、二重送信された場合の処理も、さほど難しいわけではないですし、
間違えてリロードしても大丈夫なようにした方が親切かと…。

# crypt の件、失礼しました
トップに移動
ユーザー情報を表示 メッセージを送信
ach
投稿1時間: 火 10月 24, 2006 5:20 pm  引用



登録日: 2006年8月 19日
投稿記事: 19

ブラウザのキャッシュ寿命の問題の可能性もあるので,その辺のヘッダーを出力するとうまくいくかもしれません.
(Firefoxがそんな動作したかな.Operaはデフォルトでは問題なかったはず)

もう一つの方法で,リダイレクトすることでPostしたページに直接戻れなくするという手があります.
トップに移動
ユーザー情報を表示 メッセージを送信
波多野貴文
投稿1時間: 水 10月 25, 2006 11:50 am  引用



登録日: 2006年10月 19日
投稿記事: 8

allisonさん、achさんご返信ありがとうございます。
リダイレクトで転送し、login.phpに戻れないようにしたところ、思うように動作しました。

ご教授ありがとうございました。
トップに移動
ユーザー情報を表示 メッセージを送信
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.