0

ウェブ上に散在している同様の問題の例はたくさんありますが、解決策のどれもがこの特定のバリエーションを修正していないようです。任意の提案をいただければ幸いです。Zend_SessionとZend_Log _Dbは両方ともページロードごとに2回データベースに書き込みます

通常、この問題は、ディスパッチャに複数のディスパッチプロセスが発生し、データベースの複数の行が発生するように、不正なリンクがファビコンやCSSファイルなどのリソースを要求しているために発生します。

この非常に単純な例ページのすべてのリンクが実際に指しているリソースに解決されていることを確認しました。次のように

セッションハンドラが設定され、次のように

Zend_Db_Table_Abstract::setDefaultAdapter($db); 
Zend_Session::setSaveHandler(new 
      Zend_Session_SaveHandler_DbTable($config->session->toArray())); 

デシベルのログが設定され:

$writer = new Zend_Log_Writer_Db($db, $config->log->tableName, 
      $config->log->columnMap->toArray()); 
$logger = new Zend_Log($writer); 

両方のオブジェクトが正しく設定されていると読んで、データベースとの書き込みをすることができます。すべてが2回しか起こらない。アプリケーションのどこにでもテストログメッセージを置くと、データベースに2回書き込まれます。セッションに格納されている、インデックスアクションの呼び出しごとに3つの変数をインクリメントすると、Zend_Registryオブジェクトを介して渡され、もう1つはindexActionにローカルで渡されます。セッション変数だけが2だけインクリメントされます。リクエストのうちページロードから放棄され、すべてのレスポンスコードが200または304(変更なし)のいずれかです。

すべてのヘッドリンクを無効にしようとしました。 レイアウトを完全に無効にしようとしました。 私はディスパッチャにすべてをローカライズして、ディスパッチを実行する前に終了しました。

すべての場合、追加の書き込み/増分が行われます。 考えていますか? ご協力いただきありがとうございます。

答えて

1

問題を見つけて解決したようです。 Chrome(場合によってはすべてのWebkitブラウザ)は、GETの上に追加のHEADリクエストを発行します。これは、アプリケーションが2回ヒットし、両方のリクエストの結果としてセッションベースの何かがトリガーされることを意味します。私の一時的な解決策は、index.phpファイルの先頭に次のコードを置くことです。

if ("HEAD" == $_SERVER['REQUEST_METHOD']) { 
    exit; 
} 

私は同じ問題を抱えている人に役立つことを願っています。

関連する問題