我想要这样的东西,当用户按下f5刷新网页时,网页将比较当前时间和以前存储在会话中的时间。如果当前时间与前一次相比是5秒,mysql将将数据存储到数据库中。当用户在50秒后刷新页面时,mysql应该将1个数据存储到数据库,但为什么mysql将10个数据存储到数据库?用户只刷新页面1次,但mysql插入10次。为什么会发生这种事?我的密码:
<?php
if (strtotime($_SESSION[servertime]) < time()-5){ //10800 = 3 hours 3600 = 1 hour
$_SESSION['servertime'] = $servertime;
$_SESSION['ipaddress'] = $currentipAddress;
$query = "INSERT INTO traceuser
(ibrowser, operatingsystem, ipaddress, datetime, username)
VALUES (
'{$userbrowser}', '{$CurrOS}', '{$currentipAddress}'
, '{$servertime}', '{$username}')";
$result = mysql_query($query, $connection);
} else {
echo "<script type='text/javascript'>alert('I did not save your info this time, because each visitor can save info for 1 time per 5 seconds.')</script>";
}
?>我认为问题就在这一行:if (strtotime($_SESSION[servertime]) < time()-5),当用户在50秒后刷新页面时,mysql将每5秒将数据存储到数据库,因为50秒-5秒=10秒,所以mysql插入了10行。如何使mysql只插入一行?
更新:发现了问题!我每10秒检查一次我的数据库记录,我意识到它每10秒就会插入一次新的数据,尽管我没有使用f5刷新页面。问题是我把Yahoo Ping Box添加到我的网站上了!据我所知,Yahoo Ping Box信使将每10秒检查一次新消息,我不确定Yahoo Ping Box代码如何影响我的php/mysql代码?我可以知道如何防止Yahoo Ping Box代码影响我的php/mysql代码吗?这是导致问题的Yahoo Ping框的代码:
<object id="pingboxh57fsuytam000" type="application/x-shockwave-flash" data="http://wgweb.msg.yahoo.com/badge/Pingbox.swf" width="610" height="320"><param name="movie" value="http://wgweb.msg.yahoo.com/badge/Pingbox.swf" /><param name="allowScriptAccess" value="always" /><param name="flashvars" value="wid=oCqiyuy8QmXM8PXSd0uhP6Au" /></object>您可以通过将Yahoo代码复制到您的php/mysql脚本中进行测试,您将看到神奇的将记录插入到您的数据库中,每5到10秒。我可以知道如何防止Yahoo Ping Box代码影响我的php/mysql代码吗?
发布于 2011-09-19 14:35:35
您的页面是否使用ajax或其他可能在每次页面加载时多次攻击您的服务器的技术?我同意所写的代码每次只写一次。帮助找出正在发生的事情的一种方法是在if子句中添加一个断点,或者在其中添加一个error_log() (如果没有设置调试器)。我怀疑您会发现客户端多次调用您的代码。麦克
https://stackoverflow.com/questions/7471101
复制相似问题