我想做一个循环,通常是使用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";
}
现在,考虑一下imput参数从FORM到此脚本的情况。 (即$parameter1 , $parameter2, $parameter3
)
然后我必须每次都将它们传递给新的URL(下一次迭代)。
在正常工作中我可以将它们作为GET变量传递给新的url但是如果我不希望用户能够在url中看到参数的值,我该如何传递它们?
答案 0 :(得分: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.";
}
}
答案 1 :(得分:0)
不要太粗鲁,但上面的两个答案都很容易出现安全问题(但会话解决方案是最好的解决方案)。至于@itamar的'加密'解决方案:这不是完全加密......这被称为'Caesar cypher'(http://en.wikipedia.org/wiki/Caesar_cipher),它确实像纸质核一样安全掩体...
它可以更加容易和安全;不要在会话中保存迭代,而是在数据库中保存。对于下一个请求,您唯一需要做的就是从数据库中获取迭代器并继续执行您想要执行的任何操作。会话可能被盗,这意味着有人可以让你从$ i = 10千次迭代。当迭代器存储在安全数据库中时,无法完成。