POSTが同時に複数送信される場合の原因

あるシステムをPHPとPostgreSQLで構築中に、データを登録する一つの機能で重複登録されたり、されなかったりという現象が発生した。

まずはアプリ側のソースから確認する。
ソースファイルの中でデータベースにインサートする箇所を確認してみるも、処理は一回しか実行されないようになっている。

次に現象が発生する場合と発生しない場合があるので検証する環境に目を向けてみる。

検証時に利用したブラウザは"IE8"の他、"Firefox"など。
しかし、同じ"IE8"でも発生する端末と発生しない端末があり、アプリ側に原因があるのか、端末側に原因があるのか切り分けが難しい。

"Apache"のアクセスログを見ると同時刻に"POST"が2つ来ているので、ブラウザを介して処理されているのは間違いない。


調査の結果としては、データ登録に利用するFormタグ内にはSubmitするボタンがあり、そのボタンにはJavaScriptで「クリック時に指定する値をサーバに送信する」という処理を付けていた。

Submitボタンを押すと同時に、本来のFormタグの送信機能に加えてJavaScriptの処理でサーバに対して2つPOSTしていたということになる。


問題は全てのブラウザでPOSTが2つ飛ぶとは限らず、ブラウザが違う場合はもちろん、同じブラウザとOSでも挙動が異なる場合がある。


"Firefox"の大方のバージョンではPOSTが1つしか飛ばない。
対して"IE"は6、7、8ともに端末が違うとPOSTが1つしか飛ばないものと、2つ飛ぶ場合と分かれる。


今更ながらFormとJavaScriptの2つで送信させてしまうというミスをしたが、敢えて値の違う送信を同時に2つ飛ばしたい場合は検討が必要である。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック