PHPにてウェブブラウザから二重送信を防止する処理を作っていて気が付いたのですが、Firefoxからなぜか常に2回リクエストが発生するという、とんでもない問題に出くわしました。
以下が、その問題を再現するためのコードです。
<!DOCTYPE html>
<html xml:lang=”ja” lang=”ja”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<meta http-equiv=”Content-Style-Type” content=”text/css” />
<meta http-equiv=”Content-Script-Type” content=”text/javascript” />
<title>2回リクエストが送信される事を確認するページ</title>
<meta name=”keywords” content=”” />
<meta name=”description” content=”” /><link rel=”shortcut icon” href=”” /><!– ここに””を書くと2回送信されます –>
<link type=”text/css” rel=”stylesheet” href=”” /><!– ここに””を書いても問題なし –>
<script type=”text/javascript” src=””></script><!– ここに””を書くと2回送信されます –></head>
<body>
<?php
session_start();
$_SESSION[‘count’] = @$_SESSION[‘count’] + 1;
echo ‘counter=’.$_SESSION[‘count’];
?></body>
</html>
このスクリプトをファイルに保存し、ウェブサーバにUpしてアクセスして下さい。
本来であれば、画面には counter=1 と数字がでて、その数字がアクセスするたび1づつ増えるはずです。
しかし、Firefixでアクセスすると、なぜか2飛びとなります。
原因は、上のコードにも書いていますが、”” と何も書かない場合に発生します。
ということで、HTMLコードは正しく書きましょう。