お世話になります。
POST時、外部からのPOSTデータの受取りを避けるため、セッションとhiddenデータを組み合わせる仕組みを採用していますが、試行錯誤ながら上手くいったと思うものの、同じサーバー、違うドメインで利用したら上手くいかないという、不可解な状態となっています。
そもそも不適切なソースになっているのでしょうか?
ご教示いただけたら幸いです。
ログイン時のauthに利用。
Index.php
<?php Session_start(); If(!isset($_SESSION["member_no"]) OR !isset($_SESSION["member_id"])){ //ログインしていなかったらログインページを表示 require_once("./auth.php"); } //以下、続く。
以下は、上記ファイルにアクセスした際、ログインしていなかった場合に表示するログインページです。
セッションに与えた文字列をhiddenデータにも与え、POSTされたとき、セッションデータとhiddenデータを比較比較しようとするも、セッションに値が入っていない状況となってしまいます。
auth.php
<?php session_start(); //■POSTされたhiddenデータとセッションデータを比較しようとするも、セッションに値が入っていない if(isset($_SESSION["token"]) AND $_POST["token"] == $_SESSION["token"]){ if(isset($_POST["id"]) AND isset($_POST["password"])){ //SQL実行 POSTされたIDとパスワードが実在するものか検証 }else{ $Err = "E-Mailとパスワードを入力してログインして下さい。"; } } else{ $Err = "E-Mailとパスワードを入力してログインして下さい。"; } // トークン値発行 function random2($length = 32){ return substr(bin2hex(random_bytes($length)), 0, $length); } $_SESSION["token"] = random2(); // 未エラー、$_SESSION['mail'] が未登録の場合 if($Err != "" && $_SESSION["member_no"] == ""){ authform($Err); } function authform($Err){ //ログインをある一定回数失敗したら、$Invalidは「disabled」が代入され、ログインボタンを無効化している。 global $Invalid; ?> <!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ログイン</title> </head> <body> <form method="post" name="form1"> <div class="row"> <div class="col-12 text-center"> <p><?php echo $Err; ?></p> </div> </div> <div class="row""> <div class="col-sm-3">E-MAIL</div> <div class="col-sm-9"> <input type="text" name="id" value="<?php echo $id; ?>" class="form-control float-left" placeholder="login@enone-tokyo.com" style="ime-mode:disabled; width:90%;"> </div> </div> <div class="row"> <div class="col-sm-3">PASSWORD</div> <div class="col-sm-9"> <input type="password" name="password" value="" class="form-control float-left" placeholder="" style="ime-mode:disabled; width:90%;"> </div> </div> <div class="row text-center"> <div class="col-sm-12"> <input type="hidden" name="token" value="<?php echo $_SESSION["token"]; ?>"> <p><button type="submit" class="btn btn-dark w-50" <?php echo $Invalid; ?>>Sign In</button></p> </div> </div> </form> </body> </html> <?php exit; } ?>
以上、この質問において不要と思われるソースは省いていますが、おかしなところありましたらアドバイス頂けないでしょうか?
お忙しいなか恐縮ですが、ご教示いただけましたら幸いです。
よろしくお願いいたします。