CodeIgniter控制器被调用两次

时间:2010-08-18 20:05:23

标签: php codeigniter controller

我完全有可能在某个地方犯了一个大错,但由于某种原因,我的控制器被调用了两次。这打破了DX_Auth在Chrome上的验证码,但不知何故,Firefox和IE可以处理它。

问题是,每个控制器被调用两次毫秒。我使用log_message()来打印$ _SERVER超全局中的每个键/值对。

唯一的区别是:

第一次电话

'HTTP_CACHE_CONTROL' => 'max-age=0'
'HTTP_ACCEPT' => 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'
'HTTP_COOKIE' => 'ci_session=a:4:{s:10:"session_id";s:32:"4be9cef4e2cdae468c7443f52a5fb3f2";s:10:"ip_address";s:13:"321.321.321.321";s:10:"user_agent";s:50:"Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US)+Ap";s:13:"last_activity";s:10:"1282151409";}70b300096c8d40c60a676ac65bcb222c'
'REMOTE_PORT' => '61828'

和第二次电话

'HTTP_CACHE_CONTROL' => NULL
'HTTP_ACCEPT' => '*/*'
'HTTP_COOKIE' => 'ci_session=a:4:{s:10:"session_id";s:32:"a5bb2c98a8ff4438cef3a3fe3d5ff73e";s:10:"ip_address";s:13:"321.321.321.321";s:10:"user_agent";s:50:"Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US)+Ap";s:13:"last_activity";s:10:"1282151734";}4adf1de21f9708d66b3d4bc36d0b0d92'
'REMOTE_PORT' => '61842'

CI论坛上已经有一个线程,其他人遇到了类似的问题,但他的问题竟然是间谍软件。对我来说情况并非如此。我在几台计算机上试过,我的访客都没有注册该网站。

你看,DX_auth在第一次调用时将验证码的值存储为CI会话flashdata。第二个调用擦除闪存数据,因此没有人能够正确获取验证码。

以下是我的访问日志示例

123.123.123.123 - - [18/Aug/2010:12:31:26 -0500] "GET /welcome HTTP/1.1" 200 3391 "http://somewhere.com/[age" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4"
123.123.123.123 - - [18/Aug/2010:12:31:27 -0500] "GET /welcome HTTP/1.1" 200 3391 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4"

如您所见,第一个电话似乎来自我,第二个电话没有推荐人。

我认为我用来从uri中删除index.php的.htaccess文件存在问题。因此,我切换到CI文档中所述的“默认”.htaccess重定向。双重负荷仍然发生。

RewriteEngine on
RewriteCond $1 !^(index\.php|asset|captcha|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

我还使用了FireFox的“Live HTTP headers”插件。看起来只有一个请求被发送,但FireBug的控制台显示两个回复正在回来。

有人知道发生了什么事吗?这是否发生在其他人身上?

4 个答案:

答案 0 :(得分:3)

请参阅我对类似问题的回复,以了解可能导致此问题的原因,以及如何开始确定确切问题:Controller actions being called twice --- Php application

答案 1 :(得分:0)

我遇到同样的问题,这让我很生气。 请求实际上来自firefox。 firefox浏览器发送请求两次。 所以这不是codeigniter方面的错误。尝试使用另一个版本的Firefox。它应该解决问题。

答案 2 :(得分:0)

在基于响应的DOM元素上使用jQuery绑定事件时,我遇到了这样的行为,并且忘记了你需要在该DOM元素上取消绑定旧事件。

答案 3 :(得分:0)

我的问题是这个以及在此元标记上重新加载的页面。删除它并且Firefox双重加载停止。

<meta http-equiv="Content-Type" content="text/css; charset=utf-8" />