我想知道如何最好地處理登錄表單中的返回網址。我認爲一個好方法可能是在這裏完成的。這是urlencode當前url並將其作爲get參數發送到登錄控制器。在哪裏存儲返回網址在登錄表單/控制器
這可以在登錄控制器中進行urldecoded。但是呢?我查看了StackOverflow登錄頁面,並且無法在任何地方找到該網址。它存儲在哪裏?它在登錄完成後如何知道該去哪裏?它是否存儲在cookie中?會話變量?或者是其他東西?
我想事情可以做一點不同於在PHP,但反正。什麼是這樣做的好方法?
我想知道如何最好地處理登錄表單中的返回網址。我認爲一個好方法可能是在這裏完成的。這是urlencode當前url並將其作爲get參數發送到登錄控制器。在哪裏存儲返回網址在登錄表單/控制器
這可以在登錄控制器中進行urldecoded。但是呢?我查看了StackOverflow登錄頁面,並且無法在任何地方找到該網址。它存儲在哪裏?它在登錄完成後如何知道該去哪裏?它是否存儲在cookie中?會話變量?或者是其他東西?
我想事情可以做一點不同於在PHP,但反正。什麼是這樣做的好方法?
如果它是一個靜態的URL,那麼你可以將其包含的形式作爲隱藏字段,然後重定向到它在你的代碼,即
<input type='hidden' name='return' value='/thankyou.html' />
然後在你提交功能...
header("Location: $_POST['return']");
在生產中,你會明顯地要加密的隱藏字段的URL,然後解密並調用header()函數之前驗證它是一個很好的網址,但應該給你的想法。
有些人使用cookies,其他人在DB有一個查找表。存儲URL的位置並不重要,只需在header()之前擦洗它就非常重要。
編輯:洗刷
function isValidURL($url) {
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
if (isValidURL($_POST['return']))
header("Location: {$_POST['return']}");
正如我剛纔所說,如果你想更加小心,你可以加密/展示的形式和之前驗證先前解密實際的URL。那裏有很多好的加密/解密庫。
的家庭作業是從來沒有真正「做任何事情」(比如在數據庫中插入值,運行shell命令,重定向到一個URL等)與數據通過形式的用武之地。有人可能會操縱該隱藏的領域,並通過棘手的方式將代碼注入到您的應用程序或數據庫中。有成千上萬的帖子是人們通過表單注入來做的事情的例子。
如果是我,我會在會話中設置返回URL。通過這種方式,您可以計算出合適的URL並將其與表示層分開。在檢測到設置了返回URL並且存在後期對象後,您可以設置位置標題並退出腳本。例如...
// You have the URL to return to (could be a constantly updated session variable
// or simply set when a certain page is accessed via HTTP_REFERRER - it's open)
// in a MVC application (like stackoverflow) you could add this to the controller
// for any view with return functionality.
$_SESSION['RETURN_URL'] = $Url;
// Now you have validated and processed a form (from the model). If there is a
// return url set, we redirect to it. Otherwise, we follow the default action of
// the form
if ($FormValidatedAndSubmitted)
returnToURL();
function returnToURL(){
if (isset($_SESSION['RETURN_URL'])){
header("Location: " . $_SESSION['RETURN_URL']);
unset($_SESSION['RETURN_URL']);
exit();
}
}
你會如何去角質呢? – Svish 2010-09-08 18:06:58
運行它通過一個簡單的URL驗證功能,這樣的:function isValidURL($網址) { 回報的preg_match('|^HTTP(S):// [A-z0-9-] +([A-。 z0-9 - ] +)*(:[0-9] +)?(/.*)?$ | i',$ url); } – 2010-09-08 18:16:23
對不起,這是醜陋的,我會作出新的答覆和格式。 – 2010-09-08 18:16:42