【问题标题】:looping through url遍历url
【发布时间】:2018-08-31 13:40:11
【问题描述】:

我想做一个循环,通常是用 while do for 等来完成的,但是当过程很大时,我想出了一个解决方案,通过回显 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";
}

现在,考虑一种情况,即输入参数来自 FORM 到该脚本。 (即$parameter1 , $parameter2, $parameter3) 然后我每次都必须将它们传递给新的 url(下一次迭代)。

在正常工作中,我可以将它们作为 GET 变量传递给新的 url,但是如果我不希望用户能够看到 url 中参数的值,我该如何传递它们?

【问题讨论】:

    标签: php loops


    【解决方案1】:

    在正常工作中,我可以将它们作为 GET 变量传递给新的 url,但是如果我不希望用户能够看到 url 中参数的值,我该如何传递它们?

    您不能使用裸重定向,但如果您正在谈论特定用户,您可以通过将这些参数分配为 session variables Docs 然后将会话 ID 作为附加参数传递(或相信用户有启用 cookie)。

    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.";
        }
    }
    

    【讨论】:

    • 用户可以读取cookies,我经常这样做。我不希望它们可读。我会用键对值进行编码吗? base64_encode with key 是可能的吗?
    • 参数不存储在带有会话的 cookie 中。参数保存在服务器端。
    • 您甚至可以在每个循环中重新生成会话 ID。
    【解决方案2】:

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

    它可以变得更容易和安全;不要将迭代保存在会话中,而是保存在数据库中。对于下一个请求,您唯一需要做的就是从数据库中获取迭代器并继续执行您想做的任何事情。会话可能被盗,这意味着有人可以让您从 $i=10 进行一千次迭代。当迭代器存储在安全数据库中时,无法做到这一点。

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2021-12-20
      • 2020-11-21
      • 2018-08-27
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多