Php 为URL创建唯一ID

Php 为URL创建唯一ID,php,loops,unique,Php,Loops,Unique,我正在处理的页面是安全的,因此没有人可以使用此链接到该页面: 下面的代码在循环中调用 $gentok = uniqid(); if(isset($_GET["action"]) && $_GET["action"] == "clean_$gentok") { // stuff } 然后,我用这个来调用URL: <a href="<?php echo admin_url("themes.php?page=cleaner&action=clean_$g

我正在处理的页面是安全的,因此没有人可以使用此链接到该页面:

下面的代码在循环中调用

$gentok = uniqid();

if(isset($_GET["action"]) && $_GET["action"] == "clean_$gentok") {
    // stuff
}
然后,我用这个来调用URL:

<a href="<?php echo admin_url("themes.php?page=cleaner&action=clean_$gentok"); ?>">Clean this and that</a>

但是当单击链接时,页面会刷新,并且
uniqid()
已经更改

如何使
uniqid()
在页面刷新后仍然保持不变?我愿意接受你可能有的任何改变或更好的想法


谢谢大家!

为此使用会话。将您的唯一ID放入会话数组中

session_start();

$_SESSION['gentok'] = uniqid();

if (isset($_GET["action"]) && $_GET["action"] == "clean_" . $_SESSION['gentok']) {
    // stuff
}
在你的显示器上

session_start();

<a href="<?= admin_url('themes.php?page=cleaner&action=clean_' . $_SESSION['gentok']) ?>">Clean this and that</a>
session_start();

当您创建会话时,请设置一个值,以便每次加载页面时,它都会检查您的会话是否有该值。否则你会重定向……你会把代码放在上面<代码>如果($_会话['sesname']!=$value]{头位置}

您可以将其放置在页面顶部,以便它执行检查


如果你想要一个唯一的名字,那就把人们想要的东西放在容易猜到的地方,不要把它链接到任何地方,把它作为一个社区维基发布,因为我从中没有任何收获

我在评论中关于使用nonce的建议使OP使用WordPress版本的nonce作为解决方案

参考:

旁注:老实说,我不知道WordPress有一个,而是在互联网上找到了那个参考链接

我的原始参考:

附加参考:

  • Wiki页面:

在会话中保存唯一ID和时间戳,然后在一段时间后(和/或单击链接时)续订ID.我很好奇;这是一次性使用吗?如果是的话,有更好的方法。@Fred ii-是的,只有一次我对此有感觉。为什么不使用一个nonce?@Fred ii-我以为uniqid会做这项工作,结果是一个令人不快的…啊,我不太确定nonce是如何工作的。好的,谢谢你的回答。这在
foreach
中也会起作用吗太疯狂了,
foreach($theme\u name为$theme\u name){
在问题的代码中,我发现一个nonce系统更适合这一点,我可能在我的问题中没有解释得那么好。无论如何,谢谢你的帮助和努力。:)