Php 同时为多个用户保存文件

Php 同时为多个用户保存文件,php,Php,我目前正在开发验证码系统。为此,我创建了一些随机图片,上面有一些基本的数学问题。在提交表单之前,用户必须给出正确的答案 代码如下: 正如在my on Code Review的评论中指出的那样,如果多个客户端同时使用表单,系统将无法工作,因为图像将保存在同一位置 如何在不使用不同文件名保存每张图片的情况下解决此问题(我真的不希望我的服务器上满是图片)?有几种方法可以解决此问题 您可以使用$\u SERVER['REMOTE\u ADDR']和$\u SERVER['REMOTE\u port'

我目前正在开发验证码系统。为此,我创建了一些随机图片,上面有一些基本的数学问题。在提交表单之前,用户必须给出正确的答案

代码如下:


正如在my on Code Review的评论中指出的那样,如果多个客户端同时使用表单,系统将无法工作,因为图像将保存在同一位置


如何在不使用不同文件名保存每张图片的情况下解决此问题(我真的不希望我的服务器上满是图片)?

有几种方法可以解决此问题

您可以使用$\u SERVER['REMOTE\u ADDR']和$\u SERVER['REMOTE\u port']变量创建每个用户的唯一文件名,即每个地址和端口的文件名(可能随时间一起)

注意:如果套接字关闭,端口将更改,因此如果您的客户端页面没有通过js保持套接字打开,则需要维护会话id。会话id需要在服务器端生成并存储在客户端,直到客户端准备好将其与验证一起返回


您可以让php为每个客户端取出信号量。

使用会话数据存储正确的分数。(除非您必须创建自己的库,否则您可能会发现使用现有库中的一个更容易实现此目的)@user3783243您能解释一下它是如何工作的吗?在生成页面时,您必须像
echo“what is$var1+$var2?”
这样做
$\u SESSION['captcha]=$var1+$var2在同一页上生成。在下一页,检查提交的值是否等于会话值。选中后,请确保取消设置会话值,以便无法使用暴力强制。@user3783243这是将信息存储在cookie中还是服务器端?如果它将其存储在cookie中:是否存在服务器端替代方案?标识符将位于cookie客户端。实际值将在服务器端生效。
$\u服务器['REMOTE\u ADDR']和$\u服务器['REMOTE\u PORT']
可能无法保证唯一性。
$\u SERVER['REMOTE\u ADDR']
端口可能会使其更独特,但仍可能发生冲突。保持套接字打开是保持唯一性所必需的。类似地,如果要生成“随机”会话ID,则必须跟踪这些ID,以避免在twin处于活动状态时发出相同的ID。