以下のようなコードを使って、確認メールを送信する用のコードを書きました。
MAMPでの開発中や、サーバーアップロード後、Safari・MacのChromeでは問題がなかったです。
php
1<?php 2session_start(); 3 4require_once( dirname(__FILE__). '/../../../functions.php'); 5 6// フォームの値をすでに持っていればそれを使えるようにする 7if (isset($_SESSION['form-value'])) { 8 $formValue = $_SESSION['form-value']; 9} 10$err = $_SESSION; 11// セッションをクリア 12$_SESSION = array(); 13?> 14 15<!DOCTYPE html> 16<html lang="ja" dir="ltr"> 17<head></head> 18<body> 19<?php 20 // $_SESSION['error']を表示する関数 21 errorProp($err); 22?> 23<form action="./pre-register.php" method="POST"> 24 <div class="block"> 25 <div class="block--fit"> 26 <!-- email --> 27 <input class="ring-form" type="email" name="email" placeholder="メールアドレス" value="<?php if(isset($formValue['email'])){echo h($formValue['email']);} ?>" novalidate> 28 <p class="error-msg"> 29 <?php 30 if(isset($err['msg']['email'])) { 31 echo h($err['msg']['email']); 32 } 33 ?> 34 </p> 35 </div> 36 </div> 37 <!-- --> 38 <input type="hidden" name="token_pre_signup" value="<?php echo h(setToken('token_pre_signup')); ?>"> 39 <input class="submit-ring" type="submit" value="登録"> 40</form>
php
1<?php 2session_start(); 3 4require_once( dirname(__FILE__). '/../../../functions.php'); 5 6// エラーメッセージ 7$err = $_SESSION; 8$token = filter_input(INPUT_POST, 'token_pre_signup'); 9// トークンがないか一致しない場合処理中止 10if(!isset($_SESSION['token_pre_signup']) || $token !== $_SESSION['token_pre_signup']) { 11 $_SESSION = array(); 12 $_SESSION['error'] = '不正なセッションです'; 13 header('Location: ./pre-form.php'); 14 exit(); 15}
しかし、Android(Chrome)とEdgeにて「不正なセッションです」の表示が、何度POSTしても出ることが判明しました。
- POST前のフォームに、トークンが入っていることは確認済み
そこで.htaccessの
htaccess
1RewriteCond %{REQUEST_FILENAME} !-d 2RewriteCond %{REQUEST_FILENAME}\.php -f 3RewriteRule ^(.*)$ $1.php
の表記をコメントアウトしたり、サーバーのphp.iniの設定をネットの見よう見まねで色々と編集しているうちに、
Android(Chrome)とEdge、Safariでは問題が解消されました。
しかし、MacのChromeでは逆に同じ問題が発生し、原因と解決策がわからない状況です。
POSTしてページを遷移した際に、セッションがうまく続いていない可能性などが考えられると思うのですが、解決策などご提示いただけますと幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/26 19:14
2022/04/27 09:19