PCとスマホとかクロスプラットフォーム開発してる時の話です。
開発でメインに使ってるブラウザだけなんかリロードするだけで2回データ受信行っていました。
CSRF対策で時間制限のあるトークンを発行しているのですが、
ビュー側で受け取っているのは1回目に発行されたトークン。
Zend_Sessionで保持しているのは2回目に発行されたトークン。
で、Validateして一致するはずないよねという内容でした。
以前似たような2重のトークン発行はAjax通信の時に通信がSuccessした時の処理にアクションを呼ぶようにしてたら2重通信になったということが有りました。
今回はJavascriptを使っているとはいえ、ページを新しいタブで開くだけの処理。
内容自体はAタグと変わりません。
とは言えアクションから別のアクションを呼び出したり、自身はトークンを呼び出す処理を行うのは1回限りだけれども2回一つの処理の中で呼ばれたりするのでトレースが非常に辛い。
地道にログ取得処理を埋め込んでいった結果どうも_init関数自体を2回呼んでいるという結論に。
ただのブラウザ更新でinit2回呼ぶってなんだ…?
って30分ぐらい悩んでたんですがそういやへダーを解析するエクステンション幾つか入れていたなと思い
・Live HTTP Headers
・Fire Bug
の2つを無効にしてみたところ綺麗に動き始めました。
なるほど、悪さをしていたのはソースではなくエクステンションってこともあるんだと思いました。
教訓
・テストは必ずエクステンションの入れてない真っさらなブラウザと開発用で分けろ
・原因不明の時は取り敢えずエクステンション全部無効にしてみろ
あんま技術的な話でないのに長文で申し訳ありませんでした。