我目前正在调查我网站上的双重请求问题。不是所有的时间,但有时候,请求的页面实际上会加载两次......这不是一个问题,直到它在PHP的页面上,根据请求将内容插入我的数据库(我的跟踪脚本)。
我已经读过图像标记中的空src和css背景中的空url()可能会导致页面被请求两次。
然而,我找不到任何问题。
还有什么可能导致这样的事情吗?
回答我的情况
经过一番广泛的研究后发现,在我的具体情况下,第二个请求来自用户代理“Mediapartner-Google”。我开始注意到,在提供Adsense广告的网页上,我可以在我自己访问该网页后的几秒钟内从该抓取工具进行二次访问。
如果没有Adsense广告,这似乎就不会发生。
我将在下面标出答案,因为在大多数情况下,这些都是正确的检查方法。
答案 0 :(得分:4)
我坐在那些我会发誓比这更清楚的人身边,当他们双击我们应用程序中的每个超链接时,都会惊呆了。
没花多长时间弄清楚为什么他们遇到了其他人的页面加载时间的两倍......
这样的事情在实现改变后端状态的页面时肯定会暂停。很多人将序列号放在隐藏的表单元素中,因此后端可以检测到双重提交。
答案 1 :(得分:3)
我之前见过的原因:
缺少样式表或图片
如果您正在验证HTML等,Chrome / Firefox的Web开发人员插件有时会请求两次。
有时候很难找到双重请求的根本原因。
无论哪种方式,您都应该 NOT 通过GET请求更改数据库状态(或会话状态)。您应该在没有postdata的情况下运行的唯一SQL查询是SELECT。所有更新和插入都应使用表单完成,即使表单仅包含提交按钮。
答案 2 :(得分:3)
src=""
)上的某些元素中的 <img src="" />
可以再次请求当前页面。
答案 3 :(得分:2)
答案 4 :(得分:1)
我们的CMS中有一个非常奇怪的行为,jQuery对话框灯箱中的iframe创建了一个加倍的数据库插入。 经过数小时的调试和大声的WTF,我们把它钉了下来。对话框关闭方法是在销毁之前将焦点设置为对话框的iframe,并导致重新加载iframe网址!
答案 5 :(得分:0)
我见过无数次。互联网上到处都是陌生的人,他们不断双击所遇到的一切。
您可以通过将全局双击事件侦听器附加到每个锚标记(标记)来停止此操作。
例如,如果您安装了jQuery,则可以执行以下操作:
jQuery('a').on('dblclick', function(e) { e.preventDefault(); });
这仅仅是一个例子。您可以使用原始Javascript达到相同的结果。
这应该默默地忽略双击动作。
如果它们快速单击两次而不是双击,那么您可以使用可以限制页面中所有链接上的单击手柄,以确保在3秒之内不能多次单击它们。 / p>