0

Web には同様の問題の例がたくさん散らばっていますが、この特定のバリエーションを修正する解決策はないようです。任意の提案をいただければ幸いです。

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

この非常に単純なサンプル ページのすべてのリンクが、実際にリンク先のリソースに解決されることを確認しました。

セッション ハンドラは次のように設定されます。

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

db ロギングは次のように設定されます。

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

両方のオブジェクトが正しく設定されており、データベースの読み取りと書き込みが可能です。すべてが2回しか起こりません。テスト ログ メッセージをアプリケーションの任意の場所に配置すると、データベースに 2 回書き込まれます。index アクションを呼び出すたびに 3 つの変数をインクリメントすると (1 つはセッションに格納され、1 つは Zend_Registry オブジェクトを介して渡され、もう 1 つは indexAction にローカルに渡されます)、セッション変数のみが 2 ずつインクリメントされます。Apache アクセス ログは正しい量を示します。ページの読み込みから発生するリクエストの数であり、すべてのレスポンス コードが 200 または 304 (変更なし) の良好なレスポンス コードを持っています。

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

いずれの場合も、余分な書き込み/インクリメントが発生します。何かご意見は?助けてくれてありがとう。

4

2 に答える 2

1

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

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

それが同じ問題を抱えている人の助けになることを願っています。

于 2011-02-04T12:39:16.627 に答える
0

Google Chromeは、サーバーに煩わしいリクエストを行うことで、常にfavicon.icoを要求します。Chromeでこれに注意してください。

詳細については:

http://framework.zend.com/issues/browse/ZF-11502?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#issue-tabs

Sebastian Galenski の貢献に感謝します。

于 2011-11-29T06:07:07.693 に答える