以下是这样的想法:用户点击一个页面,他可以在其中创建“项目。在此页面上,他可以上传文件和之前提交表单(由Flash提供支持,用于支持Flash / Javascript和支持的用户)通过纯PHP + 5文件unputs + iframe为没有Flash / Javascript的用户。它需要保持在同一页面。
当用户点击某个页面时,我正在使用此代码段创建长唯一ID:
$random_id = hash('SHA512', (time() * microtime()) . mt_rand(1, 1000) . mt_rand(1, 1000) . uniqid((time() * microtime())));
。此变量存储在会话中。无论如何,我需要在每次用户点击此页面时重新创建它(因为他可能会在这次取消添加项目并决定几分钟后添加它)。我也将它存储在前端的隐藏输入中(让Flash / HTML表单使用$_POST
数组发送此变量)
当用户使用Flash / Javascript上传文件时,或者当他使用PHP / iframe上传文件时,我正在验证文件,重命名&将它们移动到具有临时名称($randon_id
)的临时目录。
提交表单时,我使用$random_id
查找上传的文件,并将正确的项ID添加到文件表中。
现在我面临着很大的问题。 Os课程我使用前端验证(但它是一种“玩具”,只是为了增加可用性)所以我需要通过PHP验证表单。有时会发生用户提供不正确的数据(格式不正确等)。当用户点击提交按钮时,页面重新加载。现在我遇到了我的问题:
重新加载页面时$random_id
会在刷新时发生更改。因此,HTML格式的隐藏输入(再次,它也被Flash表单和HTML表单使用)。怎么避免这个?
澄清:否,我不想为没有Flash / Javascript的用户阻止我的网站。可访问性对我来说是一个关键,这个网站需要为任何人工作(有和没有Javascript / Flash等)。
PS。我正在使用KohanaPHP框架。
的问候,
顶
答案 0 :(得分:1)
如果我理解正确的话,如果已经设置了会话,则不要在会话中设置新的唯一ID值。即检查会话是否已存在,如果存在则使用该会话。然后,在会话到期/结束之前,用户每次加载的页面都将具有相同的ID。