質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

381閲覧

POST時のトークンのエラー

Hikary

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/04/26 15:31

編集2022/04/27 18:19

以下のようなコードを使って、確認メールを送信する用のコードを書きました。
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してページを遷移した際に、セッションがうまく続いていない可能性などが考えられると思うのですが、解決策などご提示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

単純に、Chromeにhtaccessのキャッシュが残っていたのが原因だったよう。

投稿2022/04/26 15:53

Hikary

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2022/04/26 19:14

通常 .htaccess ファイルはブラウザからはアクセスできないファイルです。 .htaccessのキャッシュではなく、ブラウザ上で一度表示されたデータのキャッシュだと思います。
Hikary

2022/04/27 09:19

確かにそうですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問