Php 通过url循环

Php 通过url循环,php,loops,Php,Loops,我想做一个循环,通常是用完成的,而做等,但当这个过程很大时,我想出了一个解决方案,通过回显javascript刷新页面以进行下一个循环 例如: 页面为http://localhost/index.php-->这将使用$i=1执行第一次迭代 在脚本末尾,它将被重定向到http://localhost/index.php?i=$i++ if (!$_GET['i']){ $i = 1; }else{ $i = $_GET['i']; } if ($i<500){ // proceed w

我想做一个循环,通常是用
完成的,而
等,但当这个过程很大时,我想出了一个解决方案,通过回显javascript刷新页面以进行下一个循环

例如:

页面为
http://localhost/index.php
-->这将使用
$i=1执行第一次迭代

在脚本末尾,它将被重定向到
http://localhost/index.php?i=$i++

if (!$_GET['i']){
 $i = 1;
}else{
 $i = $_GET['i'];
}
if ($i<500){
 // proceed with $i = $_GET['i']
 //then redirect to  http://localhost/index.php?i=$i++
}else{
 echo "done";
}
if(!$\u GET['i'])){
$i=1;
}否则{
$i=$_GET['i'];
}
如果我
在正常工作中,我可以将它们作为GET变量传递给新的url,但是如果我不希望用户能够看到url中参数的值,我如何传递它们呢

您不能使用裸重定向,但如果您谈论的是特定用户,则可以通过将这些参数指定为,然后将会话id作为附加参数传递(或相信用户启用了cookie)来实现

函数do\u重定向($i,数组$parameters)
{
$i=(int)$i;
$parameters['i']=$i;//也保存到会话
$\会话['parameters']=$parameters;
//重定向到http://localhost/index.php?i=$i&SID
}
如果(是表单请求())
{
$parameters=get_form_parameters();
do_重定向(1$参数);
}
elseif(is_redirect_loop_request())
{
$parameters=$\会话['parameters'];
$i=$parameters['i'];
如果($i<500)
{
do_重定向($i++,$parameters);
}否则{
回声“完成”;
}
}

恕我直言,但上述两种答案都很容易出现安全问题(但会话解决方案是最好的)。至于@itamar的“加密”解决方案:这并不完全是加密……这被称为“凯撒密码”(http://en.wikipedia.org/wiki/Caesar_cipher),它确实像一个纸质的核掩体一样安全


它可以更容易、更安全;不要将迭代保存在会话中,而是保存在数据库中。对于下一个请求,您唯一要做的就是从数据库中获取迭代器,然后继续执行您想执行的任何操作。会话可能会被窃取,这意味着有人可以让您从中进行迭代,比如说,$i=10次。它不能被删除当迭代器存储在一个安全的数据库中时。用户可以读取cookie,我经常这样做。我不想让它们可读。我会用key编码值吗?base64_可以用key编码吗?参数不会存储在带有会话的cookie中。参数保存在服务器端。您甚至可以根据每个lo重新生成会话id作品。
function do_redirect($i, Array $parameters)
{
   $i = (int) $i;
   $parameters['i'] = $i; // save to session as well
   $_SESSION['parameters'] = $parameters;
   // redirect to http://localhost/index.php?i=$i&SID
}

if (is_form_request())
{
    $parameters = get_form_parameters();
    do_redirect(1, $parameters);
}
elseif (is_redirect_loop_request())
{
    $parameters = $_SESSION['parameters'];
    $i = $parameters['i'];
    if ($i < 500)
    {
        do_redirect($i++, $parameters);
    } else {
        echo "done.";
    }
}