处理来自多个XHR实例的多个PHP脚本调用

Dug*_*ugi 7 php apache validation jquery jquery-file-upload

以前的样式问题:http://pastebin.com/cr432nLQ

我决定重新解释有关这个问题的整个问题,并尽可能彻底地进行.您可以在上面的粘贴中阅读之前提出的问题.

首先,感谢大家的回应,但不幸的是,他们让我无处可去.我仍然需要帮助解决我的问题.

所以,我正在使用一个名为blueimp jQuery File Upload的jQuery插件,它非常好地处理异步文件上传,它包含很多选项.该插件对我的目的来说足够好,但是我需要执行此服务器端检查以便从滥用用户中保存自己.我在谈论限制一次发生的上传次数.

默认情况下,插件的工作方式如下:用户选择多个文件(或将它们放到放置区),每个文件创建一个单独的XHR实例,然后调用我的upload.php脚本,该脚本负责存储文件.PHP上传脚本处理XHR请求,好像它只是一个图像,所以基本上,每个需要上传的图像都会upload.php单独调用脚本.

我允许上传用户的是图片.不过,我想一些限制上传数适用于10为免费用户和20为付费用户.这可以通过Javascript完成,是的,但我真的不相信Javascript这种验证,因此我正在寻求服务器端验证.但是,怎么样?这是完全不可能(至少对我来说)安全地完成.我需要以某种方式确保在我的上传脚本中用户没有超过10(或20)图像上传限制.

我发现这个jQuery插件有这个选项命名singleFileUploads:

默认情况下,使用针对XHR类型上载的单独请求上载选择的每个文件.将此选项设置为false可在每个请求中上载文件选择.

注意:使用一个请求上载多个文件需要将multipart选项设置为true(默认值).

  • 输入:boolean
  • 默认: true

这完全符合我的需要 - 发送一个完全填充的$_FILES数组,包含所有提交的图像上传.但我仍然看到这个问题.这仍然是由Javascript本身决定的.一个用户可以修改这部分脚本,并设置singleFileUploadsfalse一次吗?我想他们可以!如果他们不能,那么现在就回答这个问题 - 但我不知道.

下面有一个答案表明使用Apache mod_qos限制图像上传数量,但我不知道如何使它与两种不同的用户类型(免费和高级)不同.

请注意,客人也可以上传图片,并且免费用户限制应适用于他们.


那么我对这一切做了什么尝试?

我已经尝试创建一个会话的解决方案来跟踪用户上传的内容,并且对于每个新的上传,会话的值将增加一个 - 一个不够安全的解决方案,如下所示,因为cookie可以被清除.除了这个尝试,我无法从下面的答案中应用任何东西.


这个问题

那么,问题是从一开始就非常明确:我如何限制并发图像上传的数量以10为客人提供/免费用户和20至高级用户安全

编辑:我想值得一提的是,每个上传的图像在数据库中都有自己的行,上传时间和名称.也许这可以帮助!

谢谢.

ems*_*off 0

也许我不理解你的目标,但是你不能将会话变量分配给另一个变量,在每个循环之前重置会话变量,并使用 $_SESSION 计数和“前一个”计数的总和进行比较吗?您是否试图阻止每个用户聚合超过 10 次上传,或者只是一次性阻止 10 次连续上传?

// Before starting your loop, assign your session variable to another.
$previously_uploaded = $_SESSION['images_session_uploaded'];

// Reset $_SESSION['images_session_uploaded'] at onset
$_SESSION['images_session_uploaded'] = 0;

// ... Do yo' thang.

// Make a comparison at the end of each loop for whatever you're checking against.
if (($_SESSION['images_session_uploaded'] + $previously_uploaded) >= MAX_FREEUSER_UPLOADS_SESSION)
{
  // User has uploaded more than ten images total, but not necessarily more than ten in this round of uploads. 
}
Run Code Online (Sandbox Code Playgroud)