• 締切済み

ワンタイムパスワード

フォーム移管の際にワンタイムパスワードを組み込んで参照したいのですがなぜか値が一致しません。 $token = '毎回ランダムに組まれる文字列'; $_SESSION['c_token'] = $token; //フォームのhiddenに$tokenを渡します //表示はsmartyです。 $this->view->assign('token', $token); if ($_POST['submit']) { // ここの値が一致しません! echo $_POST['token'].'='.$_SESSION['c_token']; //エラーがなければセッションに代入しリダイレクト } 次に移管するページで$_SESSION['token']と$_SESSION['c_token']が一致していなければ 入力画面にリダイレクトさせたいのですがどうすれば値が一致するでしょうか?

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

SESSION管理がうまく行ってないのではと推測します。 vew_onetimepass.php で、SESSIONにワンタイムパスワードを保存+表示を行い submit先をcheck_onetimepass.php check_onetimepass.php で、var_dump($_SESSION)とvar_dump($_POST)とやって、 まずはいちど変数の流れを確認してみてはどうでしょうか?

関連するQ&A

  • セッションのワンタイムチケット法について

    ある本に、セッションのワンタイムチケット法として以下のように書かれていました。 $ticket = md5(uniqid(mt_rand(), TRUE)); $_SESSION['ticket'] = $ticket; <input type="hidden" name="ticket" value="<?php echo$ticket; ?>" /> $ticket = $_POST['ticket']; $halfticket = $_SESSION['ticket']; if (!isset($ticket)) { die("不正な操作が行われました。"); } elseif ($ticket != $halfticket) { die("不正な操作が行われました。"); } そこで教えて頂きたいのですが、hiddenで渡したとしても、ソースコードを確認すれば$ticketの値は分かってしまいます。 むしろ逆に相手に教えてしまっているのではと思うのですが、これはどういう事なのでしょうか? 何かこの他に処理をして実装する必要があるのでしょうか?

    • ベストアンサー
    • PHP
  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title></title> </head> <body> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • フォームについて

    お問い合わせフォームの流れについて質問です。 現在の流れを書きますと・・・ 1:フォームに入力し確認ボタンをクリック 2:エラーチェックを行う 2-a:エラーがあればページ移管せずメッセージ表示 2-b:エラーがなければPOST値をSESSIONに代入し確認画面へリダイレクト 3:確認画面で送信ボタンをクリックで送信ページにリダイレクト 4:送信ページでメールの送信を行いSESSION破棄 こんな流れが自分の中で基準となっているのですが、セッションだと最終的に リダイレクトするので、確認画面から入力画面に戻ると入力値が消えることや IEでページがうまく表示されないことがあるので、できるだけPOSTで対応したく 思っております。 入力画面でformのactionを自分自身としているので、これを確認用のページに 指定してやれば問題ないのですが、エラーがあろうがなかろうが確認用のURLに 変わってしまいます。 エラーがあるうちは、画面移管させたくないので何かいい方法はないかと思って いるのですが、皆さんはどのような流れでフォームを作成しているのでしょうか? おおまかな流れで結構ですのでアドバイスをいただければと思っております。

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • フォームの構築

    phpで以下のような流れのフォームをつくっています。 基盤となる流れで問合せでも会員登録でもフォームの流れは共通です。 1:入力ページ 2:確認ページ 3:送信完了ページ ※入力ページと確認ページでは、自分自身にPOSTしてます 入力ページで送信ボタンを押すとデータチェック(未入力や妥当性)を行います。 ここでエラーがあればエラーメッセージを各フォームの項目の下に表示しページ移管しません。 エラーがない場合にはPOST値をSESSIONに格納し確認ページへリダイレクトします。 ※確認ページの各項目の表示値はSESSION値を利用 確認ページのボタンは送信ボタンのみで戻るボタンは用意していません。必要であればブラウザの戻るで戻ります。 送信ボタンを押すと送信完了ページへリダイレクトしメール送信等の必要な処理を行います。 いちいちSESSIONを利用しないでPOSTで済ませるべきという意見もあるのですが一般的にどちらがいいのでしょうか? 確かにSESSIONを利用しない場合、処理は楽になる事もあるのですがPOSTした瞬間に ページ移管してしまうので各フォームの下にエラーメッセージの表示はできないですよね? また、hiddenを使う事によって目には見えないもののソース上では見れるので セキュリティ的にもあまりよくないという事もあるのでどちらがいいものか迷っております。 問題なく動作はしているので構築方法についてアドバイスやいい方法がありましたら教えてください!

    • ベストアンサー
    • PHP
  • 値の引渡し

    変数の受け渡しがうまくいかない・・ 助言お願いします。 【入力フォーム1】 <form action="confirm.php" method="post" target="_brank"> <input type="submit" name="which" value="A"> <input type="submit" name="which" value="B"> </form> 上の入力フォームから送信されてきたデータを 表示しながら次の入力フォームでデータを確認画面へとばす その際に【入力フォーム1】で入力された which と 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count をCSVデータにおとしていく 【入力フォーム2】 // 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count; // csvデータへ落とす値↓ $buf = "$now,$which\r\n"; import_request_variables("gP","" ); session_cache_limiter('private'); session_start(); $_SESSION['pageData'] = $_POST['which']; <html> <head> </head> <body> <form method="post" action="check.php"> <input type="hidden" name="submitflg" value="$submitflg"> <input type="hidden" name="name1" value="$name1"> //======================================================================== // ココ↓で次ページへ$nowの値を引き渡すことができなくて困ってます。 <input type="hidden" name="now" value="$now"> //======================================================================== <input type="hidden" name="which" value="<?=$_POST['which']?>"> ありがとうございます! ■さっき入力された値は:<br> <? echo $_SESSION['pageData'];?><br> ■ペンネーム <input type="text" name="name1"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • シンプルなPHPのフォームテスト

    ランダムにでた計算の答えの値を フォームによって送信して正解か間違っているかを表示する PHPプログラムを考えてみたのですが上手くいきません。 in.php ------------------------------------------ <html> <body> <?php $saki = rand(1,9); $ato = rand(1,9); echo "計算:{$saki}X{$ato}="; $seikai = $saki*$ato; echo '<form action="out.php" method="post">'; echo '<input type="text" name="kotae">'; echo '<input type="hidden" name="hidden" value="$seikai">'; echo '<input type="submit" value="回答"></form>'; ?> </body> </html> ------------------------------------------ out.php ------------------------------------------ <html> <body> <?php $kotae = $_POST["kotae"]; $seikai = $_POST["hidden"]; if($kotae == $seikai){ echo "正解です"; }else{ echo "間違いです"; } ?> </body> </html> ------------------------------------------ in.phpファイルのインプットタグhiddenの所と out.phpファイルでの$_POST["hidden"]の受け取り部分が 間違っているのだと思いますが 正しくはどのようにしたらいいのでしょうか? もっとシンプルで分かりやすい書き方もあれば お教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP
  • PHPの入力フォームのセッションによる値の受け渡し

    PHPの入力フォームに関するフォームの 値の受け渡しについての質問です フォームのフィールドの値の名前はtitleです で$_POSTで値を受け取って$_SESSIONに値を 格納、変数で出力という感じにしたいと思い こう書きました <?php session_start(); $_POST['title']=$_SESSION['tit']; $_SESSION['tit']=$title; ?> <html> <head> <title>test</title> </head> <body> <?php echo $title; ?> </body> </html> こう書いたのですが、値が表示されません 画面が真っ白になってなにも見えないです なにがおかしいのか教えてください issetはあえて使わず書いたのですが それがいけなかったのでしょうか?

    • 締切済み
    • PHP
  • SESSIONを使用したユーザ登録を作成しています。

    SESSIONを使用したユーザ登録を作成しています。 フォーム→確認ページ→登録完了という流れのページを作成しています。 ソースは下記のとおりになります。(文字数制限のため、ソースを省略しています。) フォームページ /* form.php */ <?php session_start(); ?> <html> <body> <form action="confirm.php" method="POST"> 名前:<input type="text" name="name" value="<?php echo $_SESSION["name"]; ?>" > <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="confirm" value="確認"> </form> </body> </html> 確認ページ /* confirm.php */ <?php session_start(); $regist = $_POST["regist"]; ?> <html> <body> 名前:<?php echo $name; ?> <form action="complete.php" method="post"> <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="submit" value="登録" /> </form> </body> </html> 登録完了ページ /* complete.php */ <?php session_start(); $regist = $_POST["regist"]; $link = DBNAMEなどの設定 $name = htmlspecialchars($_POST["name"]); $query = "INSERT INTO `user` (`name`) VALUES('$name')"; $result = mysql_query($query, $link); if ($result) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ?> <html> <body> <?php echo $msg; ?> </body> </html> としています。 ご質問なのですが、フォーム画面にて名前を入力して、確認画面では名前が表示されるのですが、登録完了では空の値になってデータベースに登録されてしまいます。 たぶん確認画面から登録完了画面への受け渡しができていないのはわかるのですが、記述方法がわかりません。 PHPは初心者のため、おわかりの方がいらっしゃいましたら、ご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう