【发布时间】:2013-01-30 03:48:01
【问题描述】:
假设我在 C# 中创建了一个反馈表单。 它将反馈发送到我的 PHP 页面,然后我的 PHP 页面将其添加到我的 MySQL 数据库中。 代码:
private void PostFeed(string Params)
{
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
wc.Headers["Accept"] = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
wc.Headers["Accept-Language"] = @"en-US,en;q=0.5";
string HtmlResult = wc.UploadString("http://website/feedtest.php", "POST", Params);
Console.WriteLine(HtmlResult);
}
}
在我的 PHP 上,我的代码类似于:
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$desc = $_REQUEST['description'];
connect
post result...
close connection
我的问题是:有没有办法防止洪水?我知道任何人都可以通过连续发送反馈甚至创建每秒发送 1000 个帖子请求的第三方应用程序来发送垃圾邮件/泛滥它。我正在考虑在 PHP 端实现某种检查,例如:如果来自 c# 应用程序的连接密码匹配,则继续,如果不匹配,则退出。
基本上,我不希望人们利用反馈方法向我发送垃圾邮件。
谁能推荐一个方法?还是我什至不应该担心这个? 任何帮助表示赞赏。
【问题讨论】:
-
为什么要关闭每个请求的连接?您至少应该使用连接池。
-
您能多解释一下连接池吗?你的意思是我的 PHP 将保持连接到 MySQL 并且它只会发送查询结果?
-
像 PDO 这样的库有persistent connections,可以避免在每次页面加载时重新连接。您绝对必须这样做,否则您的应用程序将非常缓慢。这些连接在请求之间保持打开状态,以便它们在收到请求的那一刻就准备就绪。连接到数据库并进行身份验证需要一秒钟的时间,但一旦建立连接,结果几乎是立竿见影的。
-
谢谢tadman,我会激活持久连接。那么这是否意味着最终,我不需要关闭连接?另外,我注意到您说“至少”;对于更快的性能,您还有其他建议吗?
-
连接池将负责回收您的数据库句柄,因此您无需担心。更快的性能来自于对您正在执行的查询的智能并避免那些明显有问题的查询。在遇到实际问题之前不要担心。