質問: 前提・環境 ------ * 言語 PHP7.0 * サーバー iis7.5 * ブラウザ chrome 60 * DB MySQL * (仮データ)DB(table)に**入っている**id 16AB * (仮データ)DB(table)に**入っていない**id 15AB * ↑ $_SESSION['id']には上記2つのデータが仮に入るとします。 現状のソースコード(簡略したもの) ------------------ ``` prepare($sql); $data[]=$_SESSION['id']; $stmt->execute($data); $dbh=null;//DBと接続を切る $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec['count(*)']==0){ /*idに15ABが入れられ、DBにそんなレコード 無い、false.phpへ飛ぶよ*/ header('location:./false.php'); exit(); }else{ /*idに16ABが入れられ、DBにそのレコード あるから、true.phpへ飛ぶよ*/ header('location:./true.php'); exit(); } ?> ``` 疑問・困っている点 ---------- これでfalse.phpとtrue.phpへの遷移切り替え自体はできている状態です。 ここからが苦戦してまして、true.php(レコードにある16ABの方)に遷移すると$_SESSION変数も渡されているのですが、false.php(レコードに無い15ABの方)に飛ぶと、先ほどのソースコードに書いた$_SESSION変数が渡されて無い状態で遷移してしまいます。 ``` ``` **長文になっているので、要約すると$_SESSION['login']=1;と$_SESSION['id']=15ABをfalse.phpに渡したいのです。** 問題の発生条件 -------- さらに、A.phpに$_SESSION変数が渡される条件と渡されない条件がありまして、 **表示されない** 1.$hogeに16ABが入った状態で上記ソース実行→true.phpへ 2.セッション削除 3.$hogeに15ABが入った状態で上記ソース実行→false.phpへ これだと遷移したときに$_SESSION変数が渡されません。 **表示される** 1 $hogeに15ABを含むDBに入っていないデータが入った状態で上記ソース実行→false.phpへ 2.セッション削除 3.再度$hogeに15ABを含むDBに入っていないデータが入った状態で上記ソース実行→false.phpへ これなら遷移したときに$_SESSION変数が渡されます。 試したこと ------ * キャッシュの悪さ、ブラウザ特有の現象かと考え他のブラウザで試してみましたが結果は変わらず * 処理にウェイトを置く(数秒処理を遅延させる等) 素直にエラーとかでしたら、これくらいのレベルなら簡単に対処できるのですが、特定の条件で思うようにいかず、困っています。 iisの設定が悪いのかなとも思い始めてます...現在進行形で試行錯誤中です。 「もしかしたらこれ書けばいけるんじゃね?」「iisのこの設定書いてる?」等あいまいな回答でもいいので、よろしくお願いします。 追記 --- ``` session_regenerate_id(true); ``` この1行を消したら正しく$_SESSIONを渡せるようになりました。 これはまた新しく質問を建てたほうがいいのか否か...
回答: セッション変数を外部ファイルから取得するためにどうやらセッションを入れる前にページ遷移していた模様です。お騒がせしました。