2009-12-28 85 views
2

這可能是一個愚蠢的問題,但我想我會問我之前,我做了一些愚蠢的事情: 我有一個自定義登錄對話框的Web應用程序,它需要一個用戶/傳遞發送到服務器。如果兩者都與數據庫中的條目相匹配,那麼用戶可能訪問的頁面大約有10個左右(取決於與該帳戶相關的權限)......大多數情況下非常簡單。PHP登錄重定向

當然,如果用戶嘗試訪問其中一個頁面而沒有真正登錄,或者沒有足夠的權限,那麼我需要將他退回到登錄頁面以輸入用戶名/密碼這將使他們獲得訪問權限。

我的問題:似乎對我來說,我需要在每個受限PHP頁面的頂部打一個電話,檢查憑證並重定向,如果它們丟失或不足......這是一個健全的方法?或者PHP提供了一種更智能的方式,不需要在應用程序的幾乎所有頁面中複製呼叫?

BTW:這不是一個MVC應用程序 - 只是直PHP

謝謝!

+0

那麼爲什麼不使用MVC應用程序?使用MVC框架,您只需要在控制器構造函數或控制器的init()函數中調用代碼(就像在Zend框架中一樣) – AntonioCS 2009-12-28 21:15:23

回答

6

是的;如果這是簡單的PHP,你需要檢查每個頁面。這並不需要是困難的,但:

if (!hasAccess($user, $page)) 
{ 
    header("Location: signin.php?redirecturl={$page}"); 
    die(); 
} 

並在hasAccess()做你的邏輯。您甚至可以將此邏輯包含在單獨的文件中,並將其包含在您的所有頁面上,並將代碼保存在一個地方,以備日後更新訪問條件或其他任何內容。

+1

我也會'urlencode()''$ page',爲了安全起見。 – mpen 2009-12-28 21:00:15

+0

'$ page'不一定是一條路徑。可能是一個整數:) – Sampson 2009-12-28 21:03:45

+0

非常感謝 - 這回答了我的問題。很高興知道我是理智的。 – Bob 2009-12-28 21:32:54

1

您可以使用一個包含了代碼來檢查,如果用戶登錄文件,然後包括這個在每個頁面的頂部,您要驗證登錄。

0

此外,看看創建一個php頭文件,爲你做登錄檢查,然後你只需要在每個頁面的頂部包含該頭,你想保護。