0

网上有很多类似问题的例子,但他们的解决方案似乎都没有解决这个特殊的变化。任何建议,将不胜感激。

通常会出现此问题,因为恶意链接导致对 favicon 或 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);

这两个对象都已正确设置,并且可以从数据库读取和写入。只有一切都发生了两次。如果我将测试日志消息放在应用程序的任何位置,它将被写入数据库两次。如果我在每次调用索引操作时增加三个变量——一个存储在会话中,一个通过 Zend_Registry 对象传递,另一个在 indexAction 本地传递——只有会话变量增加 2。Apache 访问日志显示正确的数量的请求从页面加载中触发,并且都具有 200 或 304(未更改)的良好响应代码。

我已经尝试禁用所有头部链接。我已经尝试完全禁用布局。我已将所有内容本地化到调度程序并在调度运行之前退出。

在所有情况下,都会发生额外的写入/增量。有什么想法吗?提前感谢您的帮助。

4

2 回答 2

1

我似乎已经找到并解决了这个问题。Chrome(可能还有所有 Webkit 浏览器)在 GET 之上发出一个额外的 HEAD 请求,这意味着应用程序被命中两次,并且任何基于会话的内容都将作为两个请求的结果被触发。我的临时解决方案是将以下代码放在 index.php 文件的开头附近。

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

我希望这可以帮助任何有同样问题的人。

于 2011-02-04T12:39:16.627 回答
0

谷歌浏览器总是通过向服务器发出烦人的请求来请求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 回答