2011-10-02 52 views
0

我想做一個循環,通常它與whiledofor等完成,但在過程是大我想出了一個解決方案迴應一個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中的參數值,我該如何傳遞它們?

回答

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

用戶可以閱讀cookies,我經常這樣做。我不希望它們可讀。我會用密鑰對值進行編碼嗎?帶密鑰的base64_encode是可能的? – John

+0

參數不會與會話一起存儲在cookie內部。參數保存在服務器端。 – hakre

+0

是的,明白了。 true – John

0

不是粗魯,但上面的答案很容易出現安全問題(但會話解決方案是最好的)。至於@itamar的'加密'解決方案:這不完全是加密的......這被稱爲'凱撒密碼'(http://en.wikipedia.org/wiki/Caesar_cipher),它確實與紙質核一樣安全沙坑......

它可以更容易和安全,因爲可以;不要將迭代保存在會話中,而是保存在數據庫中。對於下一個請求,您唯一需要做的就是從數據庫獲取迭代器並繼續進行任何您想要的操作。會話可能會被盜,這意味着有人可能會讓你迭代,比如說,i = 10萬次。迭代器存儲在安全數據庫中時無法完成。