当代码只运行一次时,为什么我的网站会插入两条记录!

时间:2011-04-06 18:32:28

标签: php mysql http-headers

简单地说,我正在尝试使用mysql为访问者创建一个自定义记录器。这样做,我发现我为每个页面加载插入了两个条目。

我已经排除了意外运行两次的代码。

我将查询放在每个页面上,假设它可以完美地工作。在意识到它导致两个条目发生后,我感到困惑并从其他页面中删除了查询,只将其留在索引页面上。

利用PHP的$ _SERVER ['HTTP_REFERER']和$ _SERVER ['PHP_SELF'],我将值插入日志中。要事先了解我的位置以及我目前所处的位置。

因此,假设我在创建页面上,并点击了指向index.php的“主页”的链接。数据库中的条目会说referer是'create.php',当前页面是'index.php'。但是,会插入第二个条目,表示referer为'index.php',当前页面为'index.php'

我检查了点击没有记录器的页面链接时会发生什么,所以我点击进入“创建”页面。我检查了数据库,还有另一个条目,但具有讽刺意味的是,这次只插入了一个条目。这很奇怪,因为创建页面没有代码来记录访问者,而且只插入一个条目。但是,它说的是引用者是'create.php',当前页面是index.php。这是应该是什么的倒退。

做更多的研究,我决定调查现场观看标题。所以我检查了使用firefox和IE,在那里我意识到标题得到我正在请求的页面,并且也总是得到根页面。例如,对create.php的请求返回..

GET /create.php HTTP / 1.1
GET / style / HTTP / 1.1
GET / HTTP / 1.1

我理解第一个GET,对于我请求的页面,我理解外部样式表的第二个GET。最后一个让我困惑的是,虽然它似乎证实了为什么我得到了重复的条目。

因为,在create.php页面上没有访问者日志,所以没有第一个条目进入日志,但是一旦加载了根页面,就会为create.php创建条目,并且当前页面是index.php页面,因为它正在加载根页面。

因为,在index.php页面上有一个访问者登录,当我从'create.php'转到'index.php'时,第一个GET创建一个'create.php'条目作为引用和当前页面是'index.php',但是第二个条目说'index.php'是引用者和当前页面。

所以我很确定这是我得到第二个条目的原因。

有人可以告诉我为什么它会在每个请求上加载根页吗?

我在本地使用xampp for mac os x,我知道它可能是默认的favicon。但是,我刚删除了图标,即使不显示图标,它仍会出现。

我可以提供代码示例和其他东西,这点似乎无关紧要,因为插入查询有效,当我只执行一次时,它只发生两次。

1 个答案:

答案 0 :(得分:4)

“GET /”请求自动拉动index.php。

页面上某处可能存在无效的图像SRC网址或脚本SRC或链接HREF。这些可能会导致在后台对服务器进行定期查看请求而不会意识到这一点。查看所有HTML的URL,确保它们都是有效的服务器端文件。也可能有服务器端重定向未知文件回到主页。

那或者你有一些JavaScript(可能是广告?)正在做一个ajax请求。

我们需要完整的资源来真正追踪它。