注意:这是为了学校项目,没有任何花哨的或者安全性保证,只是试图证明一个观点。
对于一些含糊不清的内容,很抱歉,我只想在我的Joomla网站上创建一篇文章,并附带一个按钮,只有最快的用户才能访问和点击它,这就是全部。我不担心安全问题甚至欺骗尝试。Joomla文章可以添加PHP JS代码等。
这其实很复杂。通过JavaScript生成按钮,防止没有JavaScript的人无限制地点击它。保持一个彗星服务器,使得当一个用户点击它时,更改会立即传播到所有其他连接的客户端,并且按钮被移除。之后,不要授权任何新用户生成按钮。
最简单的方法是不使用数据库,这里是使用简单文本(或者您可以使用YAML、ini、xml等)文件的基本逻辑,其中包含1(已点击)或0(未点击):
$filePath = './clicked.txt';
if((int) file_get_contents($filePath)){
// put code here to display the button and mark it as disabled
echo "Can't click";
} else {
// code to display button
// code to process button request and marked clicked as true in the file
file_put_contents( $filePath, '1');
echo "changed file";
}
你需要进行一些验证检查,例如文件是否可读,是否可以更新文件等,但如果您不想使用数据库,那就基本上是所有需要做的了。
此外,请确保将该文件放在Web目录下方,以防用户浏览到它。
编辑:但如果您正在使用Joomla,则只需使用数据库即可。这种方式很丑陋。
如果按钮被按下,您可以将一个值保存到数据库或创建一个文本文件。如果数据库条目或文件已存在,则不允许进一步按下。请确保在按钮被按下时禁用按钮,并且不执行服务器端操作。
你真的想让这个按钮只被点击一次吗?如果是的话,那么你需要将它的状态存储在某种数据库中,并在有人点击它时更新数据库。
最好不要通过JavaScript禁用它,因为有人可以关闭JavaScript并规避你的决定。
顺便说一下,我觉得这个要求没有太多意义。这将是 -- 最好的情况下 -- 很难验证。你可以创建一个提交按钮,重定向到另一个页面,但用户可以轻松地点击浏览器的后退按钮,然后再次点击按钮。你无法防止这种情况发生。
既然你澄清了:你最好还是将“已点击”值存储在某个数据库中(文件也可以)。
当你加载页面时,使用PHP检查文件中是否有“已点击”值。如果有,你可以直接在HTML中禁用该按钮。
我建议在 PHP (或者你正在使用的任何服务器端语言)中添加第二层检查。当有人点击按钮时,你可以直接返回到数据库/文件中,检查 "clicked" 值是否存在。如果发现它已经被点击过了,你就什么也不用做(或者向用户显示一条消息,让他们知道已经被点击过了)。否则,你可以相应地更新数据库/文件。你有几个部分需要处理。
首先,你需要一个方法来存储值(是否已被点击)。我的标准做法是在数据库中创建一个user_properties表(uid、property、value)来存储该值。
为了在应用程序中管理它,我将属性加载到用户(配置文件)对象中,并将其存储到会话中以供参考。当按钮被渲染时,你可以快速检查用户配置文件的属性数组中是否存在该值,如果存在,则禁用;否则保持不变。
当按钮被点击时,用户配置文件中的属性将被存储并更新到数据库中。个人而言,在加载时检查会话配置文件是否有变化,如果有,则更新数据库。
考虑到你的问题性质,你最好从另一端阻止用户。也就是说,由于你希望链接只被访问一次,因此服务器只提供该页面一次,然后拒绝访问。按钮对每个人都可点击,但只有一个用户会实际收到所请求的页面,并且仅限一次。
可以像其他人建议的隐藏按钮一样操作,将值设置在文件、数据库或服务器上的任何持久位置,并在页面加载时检查,如果存在,则中止、或重定向到拒绝页面。