使用重写规则时,PHP会为每个请求运行两个请求

时间:2011-02-15 19:05:14

标签: php wamp duplicate-data

我注意到PHP已经插入了两次相同的数据,即使是简单的查询,下面是我的索引文件:

<?php
require("constants.php"); //contains database settings
$database = new PDO("$type:host=$host;dbname=$name", $user, $pass); 
$query = $database->prepare('INSERT into test (test) VALUES (?)');
$query->execute(array(rand()));
echo $database->lastInsertId();

test表有一个自动增量列id和一个varchar列test。我正在使用WAMP来运行PHP和mysql。

对页面的每个请求都会插入两个具有不同值的条目(来自rand()调用)。仅回显第一个插入ID。 Chrome,Firefox和IE的行为方式相同。

这是由重写规则引起的:

RewriteEngine on
RewriteRule .* index.php

我假设有一个像robots.txt或favicon.ico这样透明请求的文件。

2 个答案:

答案 0 :(得分:2)

您是否有任何可以重定向到index.php的重写/错误文档规则?可能是尝试加载不同资源(favicon等)的页面/浏览器被重定向到索引吗?

答案 1 :(得分:1)

您应该使用form token/nonce来阻止此攻击和回复攻击。

http://www.phpro.org/tutorials/Preventing-Multiple-Submits.html